Как оценить план коррелированного подзапроса

Нет: планировщик может преобразовать подходящий EXISTS в соединение и выбрать разные способы выполнения. Конкретный план зависит от запроса, статистики, индексов и объёмов.

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

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

Нет: планировщик может преобразовать подходящий EXISTS в соединение и выбрать разные способы выполнения. Конкретный план зависит от запроса, статистики, индексов и объёмов.

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

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

Условие

Запрос выбирает пользователей, для которых EXISTS заказ с тем же user_id. Можно ли утверждать, что PostgreSQL обязательно выполнит отдельный полный поиск для каждого пользователя?

Ответ

Нет: планировщик может преобразовать подходящий EXISTS в соединение и выбрать разные способы выполнения. Конкретный план зависит от запроса, статистики, индексов и объёмов.

Пример: SELECT u.id FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id=u.id). Индекс orders(user_id) может помочь, но его наличие не диктует план. Смотрите EXPLAIN и фактические loops/rows при безопасном EXPLAIN ANALYZE. Не оценивайте сложность только по внешнему виду вложенного SQL.

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

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

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

Подробнее