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

时间:2010-10-09 17:52:19

标签: sql-server indexing covering-index composite-index

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

例如,我有以下列:

EmployeeID, DepartmentID, DesignationID, BranchID

以下是两种情况:

  • EmployeeID是主键 聚集索引和剩余的 列(DepartmentIDDesignationIDBranchID)被视为非群集 index(综合指数)。

  • EmployeeID是主键 聚集索引和DepartmentID是 非聚集索引 DesignationIDBranchID已包含在内 列“用于非聚集索引。

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

2 个答案:

答案 0 :(得分:3)

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

就这对您的申请意味着什么:

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

答案 1 :(得分:0)

涵盖索引是包含INCLUDE子句

的非聚簇索引