Я создал простой запрос, аналогичный приведенному в вопросе на MSSQL2005, и планы объяснения были другими. Первый запрос выглядит быстрее. Я не эксперт по SQL, но предполагаемый план объяснения содержал 37% для запроса 1 и 63% для запроса 2. Похоже, что самая большая стоимость запроса 2 - это объединение. Оба запроса имели две таблицы сканирования.

отрим следующие 2 запроса:

select tblA.a,tblA.b,tblA.c,tblA.d
from tblA
where tblA.a not in (select tblB.a from tblB)

select tblA.a,tblA.b,tblA.c,tblA.d
from tblA left outer join tblB
on tblA.a = tblB.a where tblB.a is null

Что будет лучше? Я предполагаю, что в целом объединение будет лучше, за исключением случаев, когда подвыбор возвращает очень маленький набор результатов.

Ответы на вопрос(0)

Ваш ответ на вопрос