复合非聚集索引和覆盖索引有什么区别?

6

SQL Server 2005包含“覆盖索引”功能,允许我们选择一个以上的非关键列并将其包含在现有的非聚集索引中。

例如,我有以下列:

EmployeeID, DepartmentID, DesignationID, BranchID

这里有两种情况:
  • EmployeeID 是一个带有聚集索引的主键,其余列(DepartmentID, DesignationID, BranchID)被视为非聚集索引(复合索引)。

  • EmployeeID是一个带有聚集索引的主键,DepartmentID是一个带有非聚集索引的 "包含列" 的非聚集索引,DesignationIDBranchID是该非聚集索引的 "包含列"。

上述两种情况之间有什么区别?如果两者相同,那么引入“覆盖索引”概念有什么新意?

可能与https://dev59.com/fHM_5IYBdhLWcg3wmkau重复。 - Gennady Vanin Геннадий Ванин
2个回答

3

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

就你的应用程序而言,这意味着什么:

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接