#sql #sql-server-2005 #sql-server-2008
#sql #sql-server-2005 #sql-server-2008
Вопрос:
в чем разница между if я написал запрос NOT следующими способами.
SELECT iBatchID,COUNT(*) FROM #temp WHERE NOT iBatchID IN (1) GROUP BY iBatchID
SELECT iBatchID,COUNT(*) FROM #temp WHERE iBatchID NOT IN (1) GROUP BY iBatchID
в чем разница между, если я использую WHERE NOT iBatchID IN (1)
и WHERE iBatchID NOT IN (1)
?
Комментарии:
1. Проверьте план выполнения, чтобы увидеть, есть ли разница.
2. Насколько я понимаю, это ничем не отличается от выражения
!(5 == 3)
and5 != 3
. Они оба оценивают одно и то же. За исключением того, что последнее лучше передает вашу цель.3. В зависимости от ваших индексов, я полагаю, компилятор может выбрать другой путь, но я просто провел тесты с двумя простыми таблицами и получил одинаковый план выполнения для обоих методов.
4. @Michael я просто проверяю, что их планы выполнения одинаковы и имеют 50% от стоимости запроса.
5. @izuriel когда я делал это для такого поля, у меня были значения в этом поле «INF», где я использую <Имя столбца>, А НЕ ‘%INF%’ в моем условии where, это выдает ошибку, и когда я делаю это НЕ <имя столбца>, А ‘%INF%»это дает мне возврат без ошибок.
Ответ №1:
Разницы нет. Они будут иметь тот же результат запроса.
И я считаю, что планы выполнения должны быть идентичными, но лучший способ выяснить это — зафиксировать фактические планы выполнения каждого запроса.
Я лично всегда выбираю ... WHERE SomeCol NOT IN (...)
, так как он читается немного понятнее, чем ... NOT WHERE SomeCol IN (...)
. Но это все личные предпочтения и то, что вы считаете более удобным для чтения и обслуживания.
Комментарии:
1. @VikrantMore нет проблем, рад помочь 🙂