Аналитик переписал запрос, поменяв порядок таблиц в цепочке JOIN. Запрос стал выполняться быстрее. Почему это могло произойти?

AПорядок таблиц в FROM строго определяет порядок соединения — первая таблица всегда ведущая
BОптимизатор PostgreSQL может изменить порядок JOIN для улучшения производительности
CТаблицы всегда соединяются справа налево — последняя в списке обрабатывается первой
DПорядок JOIN влияет на результат запроса — меняя его, можно получить другие строки
Правильный ответ. Оптимизатор PostgreSQL обычно сам выбирает оптимальный порядок соединения, но при большом числе таблиц может не найти лучший план — и ручная перестановка помогает.

Разбор

Для INNER JOIN порядок таблиц не влияет на результат — это коммутативная операция. Оптимизатор перебирает варианты порядка соединения и выбирает лучший план. Но при 8+ таблицах полный перебор отключается (параметр join_collapse_limit), и оптимизатор следует порядку из запроса. В этом случае ручная перестановка может улучшить план. Для OUTER JOIN порядок влияет на результат — их оптимизатор не переставляет.

Проверь себя · 1/3разбор после ответа
Без оконных функций нужно для каждого дня посчитать изменение выручки по сравнению с предыдущим днём. Таблица daily_revenue содержит date и revenue. Как это сделать?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»