materializadas - mysql view
¿Cómo implementar Vista materializada con MySQL? (4)
De acuerdo con los documentos y comentarios de mySQL al final de la página , parece que la gente está creando vistas y luego creando tablas a partir de esas vistas. No estoy seguro si esta solución es equivalente a crear una vista materializada, pero parece ser la única vía disponible en este momento.
¿Cómo implementar vistas materializadas?
Si no, ¿cómo puedo implementar la vista materializada con MySQL?
Actualizar:
¿Funcionaría lo siguiente? Esto no ocurre en una transacción, ¿es eso un problema?
DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`;
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`;
Este hilo es bastante antiguo, así que intentaré volver a actualizarlo un poco:
He estado experimentando e incluso implementado en producción varios métodos para tener vistas materializadas en MySQL. Básicamente, todos los métodos suponen que crea una vista normal y transfiere los datos a una tabla normal: la vista materializada real. Entonces, solo es una cuestión de cómo actualizar la vista materializada.
Esto es lo que he logrado hasta ahora:
- Uso de desencadenadores: puede establecer desencadenantes en las tablas de origen en las que construye la vista. Esto minimiza el uso de recursos, ya que la actualización solo se realiza cuando es necesario. Además, los datos en la vista materializada son en tiempo real.
- Uso de trabajos cron con procedimientos almacenados o scripts SQL: la actualización se realiza de forma regular. Tienes más control sobre cuándo se utilizan los recursos. Obviamente, sus datos son tan recientes como lo permite la tasa de actualización.
- Uso de eventos programados de MySQL - similar a 2, pero se ejecuta dentro de la base de datos
- Flexviews - utilizando FlexDC mencionado por Justin. Lo más cercano a lo real materializado.
He estado recopilando y analizando estos métodos, sus ventajas y desventajas en mi artículo Creación de vistas materializadas de MySQL
en busca de comentarios o propuestas para otros métodos para crear vistas materializadas en MySQL
Mantengo un proyecto llamado Flexviews ( http://github.com/greenlion/swanhart-tools ) que agrega vistas materializadas actualizables de forma incremental a MySQL (también conocida como actualización rápida), incluso para vistas que usan uniones y agregación. Llevo tres años trabajando en este proyecto. Incluye una utilidad de captura de datos de cambio para leer los registros de la base de datos. No se utilizan disparadores.
Incluye dos métodos de actualización. El primero es similar a su método, excepto que se construye una nueva versión, y luego RENAME TABLE se usa para intercambiar la nueva por la antigua. En ningún momento la vista no está disponible para realizar consultas, pero 2 veces el espacio se utiliza por un corto tiempo.
El segundo método es verdadero "actualización rápida", incluso tiene soporte para agregación y combinaciones.
Hay una publicación de blog al respecto: http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/
Flexviews es significativamente más avanzado que el ejemplo FromDual al que hace referencia astander.
Su ejemplo se aproxima a una vista materializada de "actualización completa". Es posible que necesite una vista de "actualización rápida", a menudo utilizada en una configuración de almacenamiento de datos, si las tablas de origen incluyen millones o miles de millones de filas.
Usted aproximaría una actualización rápida utilizando en su lugar insertar / actualizar (upsert) uniendo la "tabla de vista" existente contra las claves primarias de las vistas de origen (suponiendo que pueden conservarse con clave) o manteniendo una fecha / hora de la última actualización, y utilizando esa en los criterios de la actualización de SQL para reducir el tiempo de actualización.
Además, considere usar el cambio de nombre de la tabla, en lugar de soltar / crear, de modo que la nueva vista se pueda construir y poner en práctica casi sin vacíos de indisponibilidad. Primero cree una nueva tabla ''mview_new'', luego cambie el nombre de ''mview'' a ''mview_old'' (o bájela), y cambie el nombre de ''mview_new'' a ''mview''. En su muestra anterior, su vista no estará disponible mientras se esté ejecutando el llenado de SQL.