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

Sql 服务器执行计划是否使用索引,sql,tsql,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

我在表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’ 

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


第二个可能使用索引,也可能不使用索引。如果您在
LastChangeDate
上有一个聚集索引,那么它应该是。然而,查询可能不是很有选择性——这意味着它选择了所有行中的很大一部分。在这种情况下,数据库优化器可能会决定放弃索引并执行完整的表扫描。

当您将其用作第一次选择的功能时,您不能,
但是对于第二个选择,如果您使用聚集索引,那么您可以(这就是我问您使用的索引类型的原因…

什么类型的索引?SQL列索引您似乎有您的执行计划吗?提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如
SQL-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,
tsql
缩小了选择范围,但没有指定数据库。