Что такое EXISTS vs IN?

Middle
457 просмотров
AFK Offer AI

EXISTS проверяет, вернул ли подзапрос хотя бы одну строку: WHERE EXISTS (SELECT 1 FROM orders WHERE user_id = u.id). IN проверяет, есть ли значение в списке: WHERE user_id IN (SELECT user_id FROM orders). Функционально часто взаимозаменяемы, но EXISTS эффективнее для больших подзапросов — он останавливается на первой найденной строке. IN может быть быстрее для маленьких списков. EXISTS корректно работает с NULL (IN с NULL даёт неожиданные результаты). Оптимизатор PostgreSQL часто трансформирует IN в EXISTS автоматически.

Следующий вопрос

B-дерево — почему быстро?