复合非聚集索引和覆盖索引有啥区别

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 是主键 聚集索引和剩余的 列(DepartmentIDDesignationIDBranchID) 被视为非集群 索引(复合索引)。

EmployeeID 是主键 聚集索引和DepartmentID 是 非聚集索引 DesignationIDBranchID 是“包括 列”用于非聚集索引。

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

【问题讨论】:

可能与***.com/questions/1307990/…重复 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于复合非聚集索引和覆盖索引有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

如何将非聚集索引变成覆盖索引

索引知识系列二:联合索引索引覆盖和索引下推详解

MSSQL 的复合索引和包含索引有啥区别?

SQL SERVER大话存储结构_复合索引与包含索引

聚集索引和非聚集索引的区别

非聚集索引和复合主键之间的性能