复合非聚集索引和覆盖索引有啥区别
Posted
技术标签:
【中文标题】复合非聚集索引和覆盖索引有啥区别【英文标题】:What is the difference between composite non clustered index and covering index复合非聚集索引和覆盖索引有什么区别 【发布时间】:2011-04-23 06:29:03 【问题描述】:SQL Server 2005 包含“覆盖索引”功能,它允许我们选择多个非键列包含到现有的非聚集索引中。
例如,我有以下列:
EmployeeID, DepartmentID, DesignationID, BranchID
这里有两种情况:
EmployeeID
是主键
聚集索引和剩余的
列(DepartmentID
,DesignationID
,
BranchID
) 被视为非集群
索引(复合索引)。
EmployeeID
是主键
聚集索引和DepartmentID
是
非聚集索引
DesignationID
、BranchID
是“包括
列”用于非聚集索引。
以上两者有什么区别?如果两者相同,引入“覆盖指数”概念有什么新意?
【问题讨论】:
可能与***.com/questions/1307990/…重复 【参考方案1】:不同之处在于,如果第一个索引中有两行具有相同的 DepartmentID,则它们将根据它们的 DesignationID 和 BranchID 的值进行排序。在第二种情况下,它们不会相对于彼此进行排序,并且可以以任何顺序出现在索引中。
就这对您的应用程序而言意味着什么:
可以在 (DepartmentID, DesignationID) 上使用索引的查询对于第一个查询比第二个查询更有效。 由于需要额外的排序,构建第一个索引可能需要稍长一些的时间。【讨论】:
【参考方案2】:覆盖索引是带有 INCLUDE 子句的非聚集索引
【讨论】:
以上是关于复合非聚集索引和覆盖索引有啥区别的主要内容,如果未能解决你的问题,请参考以下文章