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

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

Разбор

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

Проверь себя · 1/3разбор после ответа
Нужно посчитать число пользователей, которые сделали хотя бы 1 заказ (таблицы users(user_id) и orders(user_id, order_id)). Какой запрос посчитает правильно?
Тренировать SQL в Telegram

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