是否有任何硬性规则来决定在非聚集索引中包含哪些列以及它应该放在哪个列中.我刚读这篇文章
https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index
我发现对于以下查询:
我发现对于以下查询:
SELECT EmployeeID,DepartmentID,LastName FROM Employee WHERE DepartmentID = 5
海报建议制作这样的索引:
CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID,DepartmentID) INCLUDE (Lastname)
这是我的问题,为什么我们不能像这样制作索引
CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID,LastName)
要么
CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID,LastName) INCLUDE (DepartmentID)
什么东西导致海报决定保留LastName列.为什么不是其他专栏?以及如何决定我们应该在哪个列中保留列?
解决方法
marc_s的那个索引建议是错误的.我添加了评论. (这也是我接受的答案!)
此查询的索引是
CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(DepartmentID) INCLUDE (Lastname,EmployeeID)
索引通常是
CREATE INDEX <name> ON <table> (KeyColList) INCLUDE (NonKeyColList)
哪里:
> KeyColList =键列=用于行限制和处理在哪里,加入,订购,GROUP BY等> NonKeyColList =非键列=在选择/限制之后用于SELECT和聚合(例如SUM(col))