SQL Server 2005 包含“覆盖索引”功能,该功能允许我们选择多个非键列来包含到现有的非聚集索引中。
例如,我有以下列:
EmployeeID, DepartmentID, DesignationID, BranchID
这里有两种情况:
EmployeeID
是主键 聚集索引和剩余的 列(DepartmentID
、DesignationID
、BranchID
)被视为非集群 指数(综合指数)。EmployeeID
是主键 聚集索引和DepartmentID
是 非聚集索引DesignationID
、BranchID
已“包含” columns”用于非聚集索引。
上面两个有什么区别?如果两者相同,引入“覆盖指数”概念有什么新内容?
最佳答案
区别在于,如果第一个索引中有两行具有相同的 DepartmentID,则它们将根据 DesignationID 和 BranchID 的值进行排序。在第二种情况下,它们不会相对于彼此排序,并且可以以任何顺序出现在索引中。
就这对您的应用程序意味着什么而言:
- 如果查询可以使用 (DepartmentID, DesignationID) 上的索引,则第一个查询的效率会比第二个查询的效率更高。
- 由于需要额外的排序,构建第一个索引可能需要稍长的时间。
关于sql-server - 复合非聚集索引和覆盖索引有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897203/