我有一個表[MyTable]與列[MyColumn] NVarchar(50)。我有此列非聚集索引,現在在運行以下兩個查詢:索引搜索與合併
SELECT 1
FROM [MyTable] M
WHERE M.[MyColumn] = @MyColumn
SELECT 1
FROM [MyTable] M
WHERE M.[MyColumn] = COALESCE(@MyColumn, M.[MyColumn])
我首先注意到的查詢使用索引查找(非聚集),第二個是使用索引掃描(非集羣)。我可以知道我將如何使用索引搜索與coalesce或isnull?
只有'MyColumn = @MyColumn或@MyColumn IS NULL'也會導致索引掃描。 ;-) – Tomalak 2011-05-31 11:46:01
我運行了「MyColumn = @MyColumn或@MyColumn IS NULL」,但它也使用了索引掃描(非集羣) – 2011-05-31 11:55:36
'OR'不會短路,它將檢查每一行。如果優化器知道它需要檢查每一行,那麼只需要掃描。 – JNK 2011-05-31 12:09:35