Что эффективнее использовать: оператор IN или EXISTS?
Уровень: Middle
Ответ
Современные СУБД часто оптимизируют IN и EXISTS схожим образом, поэтому разница невелика. Однако обычно EXISTS предпочтителен для коррелированных подзапросов, так как он прекращает поиск при первом найденном удовлетворяющем условию результате (что эффективно при больших наборах). IN удобен, когда подзапрос возвращает небольшой фиксированный список значений. Главный нюанс: NOT IN может вести себя неверно при наличии NULL внутри, тогда как NOT EXISTS такого эффекта не имеет. В целом, при эквивалентной логике предпочтения минимальны – следует выбирать тот вариант, который яснее выражает задуманный фильтр, и проверять план выполнения при оптимизации.