Sql-Server

索引中包含列的硬性和快速規則

  • May 27, 2015

是否有任何硬性規則來決定應將哪些列以及應以何種順序放入非聚集索引中。我剛剛閱讀這篇文章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, DepartmentID, 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 = 關鍵列 = 用於行限制和處理

WHERE、JOIN、ORDER BY、GROUP BY 等

  • NonKeyColList = 非鍵列 = 在選擇/限制後用於 SELECT 和聚合(例如 SUM(col))

引用自:https://dba.stackexchange.com/questions/12922