Да, причинява сканиране на таблици. (въпреки че изглежда се оптимизира, ако колоната всъщност не е nullable)
SR0007 правилото е изключително лош общ съвет, тъй като прави предиката неизползваем и означава, че всички индекси в колоната ще бъдат безполезни. Дори и да няма индекс в колоната, това пак може да направи оценките на кардиналността неточни, засягайки други части на плана.
Категоризацията му в Microsoft.Performance
категорията е доста забавна, тъй като изглежда, че е написана от някой без разбиране за изпълнение на заявки.
Твърди се, че обосновката е
Докато самият израз се оценява като unknown
вашият код връща напълно детерминистичен резултат, след като разберете, че всеки =
, <>код> ,
>код> ,
<
сравнение с NULL
оценете като Неизвестно
и че WHERE
клауза връща само редове, където изразът се оценява на true
.
Възможно е те да означават ако ANSI_NULLS
е изключен, но примерът, който дават в документацията на WHERE ISNULL([c2],0)> 2;
срещу WHERE [c2]> 2;
така или иначе няма да бъдат засегнати от тази настройка. Тази настройка
Планове за изпълнение, показващи сканиране срещу търсене или по-долу
CREATE TABLE #foo
(
x INT NULL UNIQUE
)
INSERT INTO #foo
SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)
FROM sys.all_columns
SELECT *
FROM #foo
WHERE ISNULL(x, 10) = 10
SELECT *
FROM #foo
WHERE x = 10
SELECT *
FROM #foo
WHERE x = 10
OR x IS NULL