Vistas materializadas y estrategias de REFRESH
Conserve el resultado de una consulta costosa con MATERIALIZED VIEW y actualícelo según un calendario o bajo demanda.
Vistas materializadas y estrategias de REFRESH es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Vista materializada = resultado guardado
A diferencia de una vista normal, una vista materializada almacena en disco el resultado de su SELECT. Las consultas acceden a los datos almacenados, por lo que son rápidas. Actualícela cuando sea necesario.
CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day,
SUM(total) AS revenue
FROM orders
GROUP BY 1;Consultas
Las consultas son simplemente SELECT sobre los datos materializados:
SELECT * FROM daily_revenue WHERE day >= NOW() - INTERVAL '30 days';REFRESH MATERIALIZED VIEW
Vuelva a calcular el resultado. Bloquea la vista de forma exclusiva:
REFRESH MATERIALIZED VIEW daily_revenue;
-- Selects on the view block during refresh.REFRESH MATERIALIZED VIEW CONCURRENTLY
Actualización sin bloqueo: los lectores siguen recibiendo los datos antiguos hasta que los nuevos están listos. Requiere un índice único en la vista:
CREATE UNIQUE INDEX ON daily_revenue (day);
REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;Índices en vistas materializadas
Puede crear índices en una vista materializada como en cualquier tabla, lo que acelera las consultas:
CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);Cuándo materializar
Use vistas materializadas cuando:
- La consulta subyacente sea costosa
- El resultado pueda tolerar cierto retraso
- La consulta se ejecute muchas veces entre actualizaciones
Actualización programada
No hay un programador integrado. Use pg_cron, una tarea cron del sistema operativo o el programador de su aplicación:
-- Via pg_cron extension:
SELECT cron.schedule('refresh_daily', '0 1 * * *', 'REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;');Actualización incremental
PostgreSQL no tiene actualización incremental nativa: cada REFRESH vuelve a calcular todo desde cero. Para realizar agregaciones incrementales, considere:
- «Tablas de resumen» creadas manualmente y basadas en triggers
- Agregaciones continuas de TimescaleDB
- La extensión pg_ivm (vistas materializadas incrementales)
Lectura de las tablas subyacentes sin afectar a las lecturas
La actualización CONCURRENT lee las tablas subyacentes en una instantánea de transacción, por lo que no las bloquea. Sin embargo, la actualización en sí puede ser lenta con grandes volúmenes de datos.
Uso de disco
Una vista materializada duplica el almacenamiento de sus datos. Planifique el espacio en disco en consecuencia.
Combinación con particionamiento
Para series temporales enormes, particione la vista materializada (o use TimescaleDB):
CREATE MATERIALIZED VIEW orders_summary AS ... ;
CREATE INDEX ON orders_summary (day);
-- For very large views, consider regular table + manual upsert pattern.Cuándo no usarla
Si sus lecturas toleran SQL con datos actualizados y la consulta subyacente ya es rápida, evítese el mantenimiento de las actualizaciones. Las vistas materializadas implican un compromiso: datos desactualizados a cambio de velocidad.
Recapitulación
Las vistas materializadas almacenan en caché los resultados de las consultas.
- Se almacenan en disco, admiten índices y son rápidas
- REFRESH manualmente o según un programa
- CONCURRENTLY necesita un índice UNIQUE
- Úselas para agregaciones costosas que puedan estar ligeramente desactualizadas
Comprobación rápida
¿Qué requiere REFRESH MATERIALIZED VIEW CONCURRENTLY que no requiere el REFRESH básico?
Aprende SQL con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 46
- Lecciones
- 183
Preguntas frecuentes
¿La lección «Vistas materializadas y estrategias de REFRESH» es gratis?
Sí — el texto completo de «Vistas materializadas y estrategias de REFRESH» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Vistas materializadas y estrategias de REFRESH»?
Conserve el resultado de una consulta costosa con MATERIALIZED VIEW y actualícelo según un calendario o bajo demanda. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Vistas materializadas y estrategias de REFRESH»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Vistas simples: reutilización lógica
- Vistas actualizables y triggers INSTEAD OF
- Vistas materializadas y estrategias de REFRESH
- Cuándo preagregar