Vista materializada
# Vista materializada

En un sistema de gestión de base de datos que siga el modelo relacional, una vista es una tabla virtual, que representa el resultado de una consulta. Siempre que se consulta o se actualiza una vista normal, el SGBD convierte estas operaciones en consultas o actualizaciones de las tablas usadas para definir la vista. Una vista materializada utiliza una aproximación diferente: el resultado de la consulta se almacena en una tabla real, que será actualizada de forma periódica a partir de las tablas originales. Esto proporciona un acceso mucho más eficiente, a costa de un incremento en el tamaño de la base de datos y a una posible falta de sincronía, es decir, que los datos de la vista pueden estar potencialmente desfasados con respecto a los datos reales. Es una solución muy utilizada en entornos de almacenes de datos (datawarehousing), donde el acceso frecuente a las tablas básicas resulta demasiado costoso.

Además, dado que la vista se almacena como una tabla real, se puede hacer con ella lo mismo que con cualquier otra tabla, siendo especialmente importante la capacidad de crear índices en cualquier columna, lo cual puede aumentar significativamente la velocidad de las consultas. En una vista normal, lo habitual es que solo se permita utilizar índices sobre aquellas columnas que ya tienen definido un índice en la tabla original; a veces ni siquiera se ofrece esa posibilidad.

Las vistas materializadas fueron implementadas por primera vez en el gestor de base de datos Oracle (añadido en la versión 8i). También están soportadas en Sybase SQL Anywhere. En IBM DB2, se les llama "materialized query tables". Microsoft SQL Server tiene una característica similar llamada "vistas indexadas". MySQL no tiene soporte nativo para vistas materializadas, sin embargo se pueden implementar soluciones aproximadas usando triggers o procedimientos almacenados. También es posible implementar vistas materializadas en PostgreSQL

## Implementación en PostgreSQL

Las vistas materializadas se añadieron en PostgreSQL a partir de la versión 9.3. Una vista materializada no se actualiza automáticamente, sino que solo se llena en el momento de la creación. Se puede actualizar más tarde de forma manual. En la versión 9.4, la actualización puede coincidir con las selecciones en la vista materializada si se usa la opción CONCURRENTLY.

Ejemplo de una vista materializada en PostgreSQL

