VISTAS MATERIALIZADAS EN MYSQL

Las vistas materializadas son objetos de base de datos que almacenan físicamente el resultado de una consulta SQL, como una tabla, pero se actualizan automáticamente o manualmente según los datos de las tablas base. A diferencia de las vistas regulares, que son solo consultas virtuales sin almacenamiento propio, las vistas materializadas guardan los datos en disco, lo que mejora el rendimiento al acceder a datos precomputados, especialmente en consultas complejas o grandes volúmenes de datos. Las vistas materializadas son una herramienta poderosa para optimizar el rendimiento en bases de datos, combinando la flexibilidad de una consulta con el almacenamiento físico de una tabla.

Características principales

  • Almacenamiento físico: Los datos se guardan en la base de datos, no solo la definición de la consulta.
  • Actualización: Pueden refrescarse automáticamente (incremental o completo) o manualmente, dependiendo del sistema (como PostgreSQL, Oracle, SQL Server).
  • Uso: Ideales para optimizar consultas en análisis de datos, data warehousing o reportes, ya que evitan recalcular resultados costosos.
  • Limitaciones: No siempre son editables directamente como tablas normales y pueden requerir permisos o configuraciones específicas para su actualización.
Una vez explicado que son las vistas materializadas tengo que comentaros que las vistas materializadas en MySQL no son una característica nativa como en otros sistemas de bases de datos. Sin embargo, se pueden simular utilizando una combinación de vistas y tablas físicas actualizadas periódicamente.

Cómo implementar vistas materializadas en MySQL

Para simular una vista materializada en MySQL, se pueden seguir estos pasos:
  1. Crear una tabla para almacenar los datos de la "vista materializada": Crear una tabla con la misma estructura que el resultado de la consulta que se desea materializar.

    CREATE TABLE vista_materializada_ejemplo AS
    SELECT columna1, columna2, SUM(columna3) AS total
    FROM tabla_origen
    GROUP BY columna1, columna2;
    
    Esto crea una tabla física ("vista_materializada_ejemplo") con los resultados de la consulta:
  2. Automatizar la actualización: Usa un evento de MySQL para programar la actualización periódica de la tabla materializada.

    -- Habilitar el programador de eventos
    SET GLOBAL event_scheduler = ON;
    
    -- Crear un evento para actualizar cada hora
    CREATE EVENT actualizar_vista_materializada
    ON SCHEDULE EVERY 1 HOUR
    DO
      BEGIN
        TRUNCATE TABLE vista_materializada_ejemplo;
        INSERT INTO vista_materializada_ejemplo
        SELECT columna1, columna2, SUM(columna3) AS total
        FROM tabla_origen
        GROUP BY columna1, columna2;
      END;
    
  3. Usar la tabla como una vista materializada: Ahora se puede consultar "vista_materializada_ejemplo" como si fuera una tabla normal, obteniendo un acceso más rápido a los datos precalculados.

    SELECT * FROM vista_materializada_ejemplo;
    
    En el siguiente enlace podéis ver como manejar vistas en MySQL.