复合非聚簇索引和覆盖索引之间有什么区别

Tom*_*Tom 5 sql-server indexing composite-index covering-index

SQL Server 2005包括"覆盖索引"功能,该功能允许我们选择多个非密钥列包含在现有的非聚簇索引中.

例如,我有以下列:

EmployeeID, DepartmentID, DesignationID, BranchID
Run Code Online (Sandbox Code Playgroud)

以下是两种情况:

  • EmployeeID是聚簇索引和剩余的列主键(DepartmentID,DesignationID, BranchID)被作为非聚集索引(复合索引).

  • EmployeeID是聚簇索引的主键和DepartmentID是与非聚集索引 DesignationID,BranchID属于"包括列"非聚集的索引.

上面两个有什么区别?如果两者都是相同的新引入"覆盖指数"概念?

Mar*_*ers 3

不同之处在于,如果第一个索引中有两行具有相同的 DepartmentID,则它们将根据 DesignationID 和 BranchID 的值进行排序。在第二种情况下,它们不会相对于彼此排序,并且可以以任何顺序出现在索引中。

就这对您的应用程序意味着什么而言:

  • 可以在 (DepartmentID, DesignationID) 上使用索引的查询对于第一个查询比第二个查询更有效。
  • 由于需要额外的排序,构建第一个索引可能需要稍长的时间。