2010-10-09 130 views
5

SQL Server 2005包含“覆盖索引”功能,它允许我们选择多个非关键列以包含到现有的非聚集索引中。复合非聚集索引与覆盖索引之间的区别是什么

例如,我有以下的列:

EmployeeID, DepartmentID, DesignationID, BranchID 

这里有两种情况:

  • EmployeeID是 聚集索引和剩余 列(DepartmentIDDesignationID主键, BranchID)被视为非聚集 索引(复合索引)。

  • EmployeeID是 聚集索引主键和DepartmentID是用于非聚集索引 非聚集索引与 DesignationIDBranchID被“列入 列”。

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

+0

可能与http://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index复制一个非聚集索引 – 2010-10-10 15:10:23

回答

3

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

在这是什么意思你的应用方面:

  • 它可以使用(DepartmentID的,DesignationID)索引可以以比第二,第一查询更高效的查询。
  • 由于需要进行额外的排序,构建第一个索引可能需要稍微延长一点。