Нет: планировщик может преобразовать подходящий 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.