Нужно выбрать пользователей, у которых есть хотя бы один заказ суммой > 5000₽. Таблица orders содержит 100М строк. Что работает быстрее: WHERE EXISTS (SELECT 1 FROM orders ...) или WHERE user_id IN (SELECT user_id FROM orders WHERE ...)?
SQLhardsenior
Варианты ответа
На современных оптимизаторах (PostgreSQL 12+, MySQL 8+) разница минимальная — оба разворачиваются в semi-join. На старых БД EXISTS чаще быстрее, т.к. останавливается на первой найденной строке
IN всегда быстрее EXISTS, так как оптимизатор материализует результат подзапроса один раз в hash-таблицу и потом делает O(1) lookup — это существенное преимущество на больших таблицах
EXISTS всегда быстрее IN, потому что SQL-парсер специально оптимизирует эту конструкцию: останавливается на первом найденном совпадении и не читает остаток таблицы — классика performance-tuning
Разницы нет ни в одной из современных СУБД: IN и EXISTS оптимизатором приводятся к идентичному плану выполнения, поэтому выбор между ними определяется только стилистическими предпочтениями
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
2475 вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.