2010-03-28 19 views
19

¿Cómo implementar Vistas Materializadas?¿Cómo implementar Vista Materializada con MySQL?

En caso negativo, ¿cómo puedo implementar Vista materializada con MySQL?

Actualización:

¿El siguiente trabajo? 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`; 
+2

Eche un vistazo a [Vistas materializadas con MySQL] (http://www.fromdual.com/mysql-materialized-views) –

Respuesta

2

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 depósito de datos, si las tablas de origen incluyen millones o miles de millones de filas. Aproximaría una actualización rápida insertando/actualizando (upsert) uniendo la "tabla de vista" existente contra las claves primarias de las vistas de origen (suponiendo que se pueden conservar las claves) o guardando una fecha_hora de la última actualización y usar eso en los criterios de 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, para que la nueva vista pueda construirse y colocarse casi sin ningún espacio de indisponibilidad. Cree una nueva tabla 'mview_new' primero, luego cambie el nombre de 'mview' a 'mview_old' (o suéltelo), y cambie el nombre de 'mview_new' a 'mview'. En el ejemplo anterior, su vista no estará disponible mientras se ejecuta su SQL populate.

30

Mantengo un proyecto llamado Flexviews (http://github.com/greenlion/swanhart-tools) que agrega vistas materializadas refrescables incrementalmente a MySQL (también conocido como actualización rápida), incluso para vistas que usan uniones y agregación. He estado trabajando en este proyecto durante tres años. Incluye una utilidad de captura de datos modificados para leer los registros de la base de datos. No se usan desencadenantes.

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 cambiar el nuevo por el antiguo. En ningún momento la vista no está disponible para consultas, pero 2 veces el espacio se usa por un corto tiempo.

El segundo método es verdadero "actualización rápida", incluso tiene soporte para agregación y uniones.

Hay un post al respecto: http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews es mucho más avanzado que el ejemplo FromDual referenciado por Astander.

+0

pero las herramientas swanhart no son compatibles con Java? –

+0

FlexCDC requiere PHP 5.3+. Es una herramienta externa que recopila registros binarios. El resto de Flexviews se crea a partir de rutinas almacenadas (programas que viven y se ejecutan en la base de datos). No hay ninguna razón por la que no pueda crear/acceder a las vistas materializadas de Flexviews si está utilizando JDBC, ya que JDBC se conecta a MySQL, y crea/visualiza/mantiene vistas a través de la interfaz SQL. –

0

De acuerdo con mySQL docs and comments at the bottom of the page, parece que las personas crean vistas y luego crean tablas a partir de esas vistas. No estoy seguro de si esta solución es equivalente a crear una vista materializada, pero parece ser la única avenida disponible en este momento.

Cuestiones relacionadas