SQL Academy · Lección

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.

Lección 3 de 414 pasos

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?

Gratis para empezar

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

  1. Vistas simples: reutilización lógica
  2. Vistas actualizables y triggers INSTEAD OF
  3. Vistas materializadas y estrategias de REFRESH
  4. Cuándo preagregar
← Volver a SQL Academy