创建带包含列的索引 sqlserver

Posted 横刀立马 醉卧山岗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建带包含列的索引 sqlserver相关的知识,希望对你有一定的参考价值。

在 SQL Server 2005 中,可以通过将非键列添加到非聚集索引的叶级别来扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:

它们可以是不允许作为索引键列的数据类型。
在计算索引键列数或索引键大小时,数据库引擎 不考虑它们。
当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。

注意:
当索引包含查询引用的所有列时,它通常称为“覆盖查询”。

键列存储在索引的所有级别中,而非键列仅存储在叶级别中。有关索引级别的详细信息,请参阅表组织和索引组织。

使用包含性列以避免大小限制
可以将非键列包含在非聚集索引中,以避免超过当前索引大小的限制(最大键列数为 16,最大索引键大小为 900 字节)。数据库引擎 计算索引键列数或索引键大小时,不考虑非键列。

CREATE INDEX IX_Address_PostalCode  
ON Person.Address (PostalCode)  
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  

参考文章
https://blog.csdn.net/wangjunhe/article/details/7228226

以上是关于创建带包含列的索引 sqlserver的主要内容,如果未能解决你的问题,请参考以下文章

包含列的 SQL Server 索引 - 转换为 Oracle

具有许多包含列的 SQL Server 范围索引

[转帖]SQL Server 索引中include的魅力(具有包含性列的索引)

为啥我不能简单地添加一个包含所有列的索引?

包含列的索引:SQL Server索引的阶梯级别5

包含列的索引:SQL Server索引的阶梯级别5