En SQL hay dos tipos de vistas:
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.
CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';
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;
¿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:
REFRESH, de lo contrario, se produce un desajuste de datos.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.