服务器执行计划是否使用索引

时间:2018-09-29 21:32:58

标签: sql tsql

我在表dbo.Employee的“ LastChangeDate”列上添加了索引。在以下两种情况下,SQL Server执行计划都将使用此索引吗?有人可以解释为什么或为什么不这样做。

SELECT EmployeeName  
FROM dbo.Employee  
WHERE DATEADD(MONTH, -2, LastChangeDate) >= ‘2016-01-01’ 

SELECT EmployeeName  
FROM dbo.Employee  
WHERE LastChangeDate >= ‘2016-01-01’ 

2 个答案:

答案 0 :(得分:2)

第一个不能使用索引,因为LastChangeDate是函数的参数。据我所知,SQL Server中唯一不允许索引的功能是转换为日期。

第二个可能使用也可能不使用索引。如果您在LastChangeDate上有聚集索引,则应该。但是,查询大概不是非常有选择性-意味着它选择了所有行的很大一部分。在这种情况下,数据库优化器可能会决定放弃索引并进行全表扫描。

答案 1 :(得分:1)

当您像第一次选择那样将其用作功能时,您不能, 但是对于第二个选择是否使用了聚集索引,则可以(这就是为什么我要问您使用的索引类型...)