В самом запросе как бы ты реализовал фильтрацию перед джойном?

Вынесите фильтрацию в подзапрос или CTE перед JOIN, сохранив нужную семантику. Реальный порядок выполнения всё равно проверяют по плану оптимизатора.

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

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

Вынесите фильтрацию в подзапрос или CTE перед JOIN, сохранив нужную семантику. Реальный порядок выполнения всё равно проверяют по плану оптимизатора.

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

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

Вынесите фильтрацию в подзапрос или CTE перед JOIN, сохранив нужную семантику. Реальный порядок выполнения всё равно проверяют по плану оптимизатора.

Например, сохранить всех клиентов и присоединить только оплаченные заказы:

SELECT c.id, o.id AS order_id
FROM clients c
LEFT JOIN (
    SELECT id, client_id
    FROM orders
    WHERE status = 'paid'
) o ON o.client_id = c.id;

Фильтр в ON может дать тот же результат. А перенос его в общий WHERE исключит строки без совпадения. Для INNER JOIN оптимизатор часто сам проталкивает допустимые фильтры, поэтому CTE не гарантирует ускорение.

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

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

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

Подробнее