我有一个表[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