sql-server – 索引中包含列的硬性和快速规则

前端之家收集整理的这篇文章主要介绍了sql-server – 索引中包含列的硬性和快速规则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有任何硬性规则来决定在非聚集索引中包含哪些列以及它应该放在哪个列中.我刚读这篇文章 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))

原文链接:https://www.f2er.com/mssql/79490.html

猜你在找的MsSQL相关文章