admin

索引是否与“泪N”子句一起使用

sql

如果我有这样的查询:

Select EmployeeId 
From Employee 
Where EmployeeTypeId IN (1,2,3)

并且我在该EmployeeTypeId字段上有一个索引,SQL Server仍然使用该索引吗?


阅读 121

收藏
2021-05-10

共1个答案

admin

是啊,没错。如果您的Employee表有10,000条记录,而EmployeeTypeId(1,2,3)中只有5条记录,那么它很可能会使用索引来获取记录。但是,如果发现9,000条记录具有EmployeeTypeIdin(1,2,3),则它很可能只是执行表扫描以获取对应的EmployeeIds,因为仅遍历整个表比遍历每个表更快索引树的分支,并分别查看记录。

SQL Server做了大量工作来尝试优化查询的运行方式。但是,有时无法得到正确的答案。如果您知道SQL
Server未使用索引,则可以通过查询查询分析器中的执行计划,告诉查询引擎使用特定的索引,并对查询进行以下更改。

SELECT EmployeeId FROM Employee WITH (Index(Index_EmployeeTypeId )) WHERE EmployeeTypeId IN (1,2,3)

假设您在该EmployeeTypeId字段上拥有的索引名为Index_EmployeeTypeId

2021-05-10