🧐 Временные таблицы (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)

❓ Какой из этих инструментов вы используете чаще: временные таблицы или материализованные представления и используете ли вообще? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

@@dima_sqlit


Ссылки