Materialized view — database object, хранящий результат query как physical table, в отличие от regular view (virtual). Фаst при SELECT (просто read table), но требует explicit refresh при data changes. Используется для: expensive aggregations (SUM, AVG по millions rows), JOIN multiple large tables, analytics dashboards. Native support: Postgres, Oracle. MySQL — через triggers или periodic table swap.
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
-- Create materialized view
CREATE MATERIALIZED VIEW orders_daily_summary AS
SELECT
DATE(created_at) AS day,
status,
COUNT(*) AS orders,
SUM(amount) AS revenue
FROM orders
GROUP BY day, status;
-- Index для fast queries
CREATE INDEX ON orders_daily_summary (day);
-- Refresh periodically (cron)
REFRESH MATERIALIZED VIEW CONCURRENTLY orders_daily_summary;Материализованный вид — это объект базы данных, который хранит результаты запроса в виде таблицы, обеспечивая более быстрый доступ к данным. В отличие от обычного представления, материализованный вид периодически обновляется, что позволяет оптимизировать производительность запросов к большим объемам данных, особенно в аналитических системах. Например, в PostgreSQL для создания материализованного вида используется команда CREATE MATERIALIZED VIEW.
Использование материализованных видов имеет несколько ключевых преимуществ:
Однако стоит учитывать, что материализованные виды требуют периодического обновления для синхронизации с основными данными. В PostgreSQL для обновления материализованного вида используется команда REFRESH MATERIALIZED VIEW, которая может быть выполнена как с блокировкой, так и без нее.
Рассмотрим практический пример создания и использования материализованного вида в PostgreSQL. Предположим, у нас есть таблица sales, содержащая информацию о продажах:
CREATE TABLE sales (id SERIAL PRIMARY KEY, product_id INT, quantity INT, sale_date DATE);Мы хотим создать материализованный вид, который будет хранить общее количество проданных товаров по месяцам. Для этого выполните следующую команду:
CREATE MATERIALIZED VIEW monthly_sales AS SELECT DATE_TRUNC('month', sale_date) AS month, SUM(quantity) AS total_quantity FROM sales GROUP BY month;Теперь, чтобы получить данные о продажах по месяцам, вы можете просто выполнить:
SELECT * FROM monthly_sales;Для обновления материализованного вида, чтобы отразить новые продажи, используйте:
REFRESH MATERIALIZED VIEW monthly_sales;Таким образом, материализованные виды становятся мощным инструментом для повышения производительности запросов в базах данных, особенно при работе с большими объемами информации.
Regular — virtual, re-computed при каждом query. Materialized — stored, fast read, stale data.
Balance freshness vs load. For dashboards: 5-15 min. For reports: hourly/daily. Incremental better для high-rate tables.
<code>REFRESH MATERIALIZED VIEW CONCURRENTLY</code> — no lock on читателей. Требует UNIQUE index. Recommended для prod.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.