ProgramaciónDesarrollador SQL / arquitecto de bases de datos

¿Cuáles son los tipos de vistas (VIEW) en SQL? ¿Cómo funcionan las vistas materializadas y en qué se diferencian de las vistas normales? ¿Cuándo es conveniente su uso?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

En SQL hay dos tipos de vistas:

  • Vistas normales (View): tablas virtuales lógicas. No almacenan datos, cada consulta a una VIEW genera una subconsulta a las tablas originales.
  • Vistas materializadas (Materialized View): almacenan físicamente el resultado de la ejecución de una consulta en una tabla separada, que se actualiza periódicamente.

Vistas normales son útiles para abstraer la complejidad, simplificar el acceso y combinar datos de varias fuentes. No aceleran las consultas, ya que siempre se generan sobre la marcha.

Vistas materializadas ofrecen una mejora en el rendimiento para informes complejos y análisis, donde es importante no esperar por agregaciones y joins cada vez. Deben ser actualizadas manualmente o por programación para que los datos no queden obsoletos.

Ejemplo de una VIEW normal:

CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';

Ejemplo de una VIEW materializada (PostgreSQL):

CREATE MATERIALIZED VIEW active_users_agg AS SELECT country, COUNT(*) as cnt FROM users WHERE status = 'active' GROUP BY country; -- Para actualizar: REFRESH MATERIALIZED VIEW active_users_agg;

Pregunta engañosa

¿Se pueden actualizar los datos en una VIEW y cómo depende esto del tipo de VIEW?

A menudo se piensa erróneamente que las VIEW son completamente idénticas a las tablas en cuanto a actualizabilidad. EN REALIDAD:

  • Vistas normales raramente permiten actualizaciones: solo si no hay campos agregados, grupales o compuestos/calculados (y solo en ausencia de JOIN y subconsultas).
  • Vistas materializadas no se pueden actualizar directamente en absoluto, solo a través de REFRESH, de lo contrario, se produce un desajuste de datos.

Ejemplos de errores reales por desconocer los matices del tema


Historia 1

Un informe BI se construyó a través de una VIEW normal con varios JOIN y agregaciones. Después de aumentar la carga, el tiempo de construcción del informe aumentó a decenas de minutos. Un analista de sistemas propuso una vista materializada, lo que redujo instantáneamente el tiempo a segundos, ya que los datos comenzaron a almacenarse en una tabla separada.


Historia 2

Un desarrollador, al migrar a Oracle, intentó hacer un UPDATE a través de una VIEW normal, lo que provocó un error: "view with group by is not updatable". La razón fue el uso de GROUP BY en la vista.


Historia 3

En una empresa se olvidaban de actualizar la vista materializada después de importar nuevos datos, lo que provocaba desajustes en los informes entre diferentes usuarios, ya que el análisis trabajaba con datos antiguos de esa VIEW. Luego se agregó un REFRESH automático programado.