小编Sta*_*ite的帖子

为什么在SQL索引中使用INCLUDE

我最近在我维护的数据库中遇到了一个索引:

CREATE INDEX [IX_Foo] ON [Foo]
( Id ASC )
INCLUDE 
( SubId )
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,我遇到的性能问题(Id和SubId上的慢速SELECT过滤)可以通过简单地将SubId列移动到索引中而不是作为包含列来修复.

这让我想到了我根本不理解包含列的原因,一般来说,它们可能只是索引本身的一部分.即使我不特别关心索引本身的项目,在索引中使用列而不是简单地包含列也有任何缺点.

经过一些研究,我发现对索引列中的内容有很多限制(索引的最大宽度,以及一些不能像'image'那样索引的列类型).在这些情况下,我可以看到您将被迫在索引页数据中包含该列.

我唯一能想到的是,如果SubId上有更新,如果包含该列,则不需要重新定位该行(尽管索引中的值需要更改).还有别的东西让我失踪吗?

我正在考虑浏览数据库中的其他索引,并尽可能在索引中包含列.这会是一个错误吗?

我主要对MS SQL Server感兴趣,但也欢迎其他数据库引擎的信息.

sql sql-server indexing covering-index

14
推荐指数
2
解决办法
3196
查看次数

标签 统计

covering-index ×1

indexing ×1

sql ×1

sql-server ×1