6

SQL Server 2005 包含“覆盖索引”功能,它允许我们选择多个非键列包含到现有的非聚集索引中。

例如,我有以下列:

EmployeeID, DepartmentID, DesignationID, BranchID

这里有两种情况:

  • EmployeeID是具有聚集索引的主键,其余列(DepartmentID, DesignationID, BranchID)被视为非聚集索引(复合索引)。

  • EmployeeID是具有聚集索引的主键,并且DepartmentID是具有 的非聚集索引 DesignationID,是非聚集索引BranchID的“包含列”。

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

4

2 回答 2

3

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

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

  • 可以在 (DepartmentID, DesignationID) 上使用索引的查询对于第一个查询比第二个查询更有效。
  • 由于需要额外的排序,构建第一个索引可能需要稍长一些的时间。
于 2010-10-09T17:56:59.550 回答
0

覆盖索引是带有 INCLUDE 子句的非聚集索引

于 2018-03-01T15:01:40.553 回答