索引寻求与合并

Roc*_*ngh 11 sql-server indexing sql-server-2005 sql-server-2008

我有一个表[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] )   
Run Code Online (Sandbox Code Playgroud)

我注意到第一个查询是使用Index Seek(NonClustered),第二个查询是使用Index Scan(Non Clustered).我可以知道如何利用coalesce或isnull来使用索引搜索?

Mik*_*son 2

我可以知道如何使用合并或 isnull 进行索引查找吗?

也许不是您问题的答案,但您可以有两个不同的疑问。一种用于 where 情况@MyColumn is null,另一种用于您要@MyColumn在 where 子句中使用的情况。

IF @MyColumn IS NULL
BEGIN
  SELECT  1
  FROM    [MyTable] M
END  
ELSE
BEGIN
  SELECT  1
  FROM    [MyTable] M
  WHERE   M.[MyColumn] = @MyColumn
END  
Run Code Online (Sandbox Code Playgroud)