Будет ли CTE материализован, если он используется только один раз для JOIN с итоговым результатом?

Не обязательно. В PostgreSQL 12+ простой нерекурсивный CTE без побочных эффектов при одном использовании обычно встраивается в основной запрос.

Короткий ответ

Что ответить на собеседовании

Не обязательно. В PostgreSQL 12+ простой нерекурсивный CTE без побочных эффектов при одном использовании обычно встраивается в основной запрос.

Подробный разбор

Ответ с пояснениями

Не обязательно. В PostgreSQL 12+ простой нерекурсивный CTE без побочных эффектов при одном использовании обычно встраивается в основной запрос.

Решение зависит от СУБД, версии и содержимого CTE. MATERIALIZED может принудительно выделить вычисление, NOT MATERIALIZED — разрешить встраивание там, где это допустимо.

Рекурсия, модифицирующие запросы и volatile-функции меняют ситуацию. Сам факт JOIN с итоговым результатом ничего не гарантирует. Проверяйте EXPLAIN: временное имя в WITH — логическая организация запроса, а не обещание создать отдельную физическую таблицу.

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее