加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:19:01 所属栏目:MsSql教程 来源:网络整理
导读:是否有任何硬性规则来决定在非聚集索引中包含哪些列以及它应该放在哪个列中.我刚读这篇文章 https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index 我发现对于以下查询: SELECT EmployeeID,DepartmentID,LastName
是否有任何硬性规则来决定在非聚集索引中包含哪些列以及它应该放在哪个列中.我刚读这篇文章 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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读