🧐 Временные таблицы (TEMP TABLE) vs Материализованные представления (MATERIALIZED VIEW) в SQL — простое объяснение: что это такое и в чём разница? Часть 2.
Продолжаем разбираться с временными конструкциями в SQL.
Первую часть можно посмотреть вот здесь
Многие путают временные таблицы (TEMP TABLE) и материализованные представления (MATERIALIZED VIEW), потому что оба хранят данные физически. Но временные таблицы — для сеанса, а материализованные — как кэш с обновлениями. Давайте разберём их работу на таблице sales из первой части.
Представим, что у нас в базе данных есть таблица sales (продажи в магазине):
id | user_id | product | amount | date
1 | 101 | Кофе | 500 | 2025-01-15
2 | 102 | Чай | 300 | 2025-01-16
3 | 101 | Печенье | 200 | 2025-01-17
4 | 103 | Кофе | 500 | 2025-01-18
1️⃣ Что такое временные таблицы (TEMP TABLE)?
Временная таблица — это реальная таблица, которая создаётся на время сеанса и хранит данные физически. Она исчезает автоматически при закрытии сеанса (что такое сеанс описано в первой части). Полезна для промежуточных расчётов с большими данными.
Пример временной таблицы:
-- Создаём временную таблицу
CREATE TEMP TABLE temp_sales AS
SELECT * FROM sales WHERE amount > 300;
-- Используем в сеансе
SELECT user_id, SUM(amount) FROM temp_sales GROUP BY user_id; -- ✅ Работает
-- Новый сеанс — исчезла
SELECT * FROM temp_sales; -- ❌ Ошибка!
2️⃣ Что такое материализованные представления (MATERIALIZED VIEW)?
Материализованное представление — это VIEW, которое хранит данные физически, как таблица, но обновляется по расписанию или вручную. В отличие от обычного VIEW, оно не пересчитывается каждый раз — данные “заморожены” до обновления. Полезно для тяжёлых отчётов.
Пример материализованного VIEW (в PostgreSQL, например):
-- Создаём материализованное VIEW
CREATE MATERIALIZED VIEW mat_user_summary AS
SELECT user_id, COUNT(*) as order_count, SUM(amount) as total_spent
FROM sales GROUP BY user_id;
-- Используем как таблицу
SELECT * FROM mat_user_summary WHERE total_spent > 400; -- ✅ Быстро, данные из кэша
-- Обновляем данные
REFRESH MATERIALIZED VIEW mat_user_summary; -- Пересчитывает
3️⃣ В чём разница между временными таблицами и материализованными VIEW?
• Хранение: Оба физически, но временные — только в сеансе, материализованные — постоянно, с обновлениями.
• Создание: TEMP TABLE для сеанса, MATERIALIZED VIEW для долгосрочного кэша.
• Обновление: Временные таблицы не обновляются автоматически (данные статичны после создания; для изменений нужно вручную обновлять их содержимое, например, через INSERT/UPDATE). Материализованные — вручную по команде (REFRESH) или через триггеры/расписания в некоторых СУБД.
Итог:
Временные таблицы — для быстрых расчётов в одном сеансе, а материализованные VIEW — для ускорения частых запросов с редкими обновлениями. Не путайте с обычными VIEW!
🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Какой из этих инструментов вы используете чаще: временные таблицы или материализованные представления и используете ли вообще? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.