在非聚集索引中将许多列作为包含列的成本是多少?

xhr*_*489 0 sql-server t-sql

在 SQL Server 的非聚集索引中将许多列作为包含列的成本是多少?

Nik*_*kiy 6

包含索引的列越多,该索引就越大。它影响该索引的所有操作(插入、更新、选择)。它在缓冲池中占用更多空间,并且当您使用索引时需要处理更多数据(包括完整性检查和备份等维护任务)。此外,当您更新包含在该索引中的列时,SQL Server 也需要更新该索引(这意味着更多的读取、写入甚至更多的锁定)。


KAS*_*DBA 5

Nikita 的回答几乎涵盖了所有内容。

然而,答案还取决于您可能决定添加的列数和列的类型。

如果您添加具有占用较少空间的数据类型的列,则总体成本可能看起来并不那么有害。请注意,我之所以这么说,是因为我们不知道您在谈论多少列。

但是,如果有像 nvarchar(max) 这样的列存储关于某事的整个故事,您可以想象将这些列添加为包含列会使事情迅速恶化,可能应该避免。

现在如何对这些事情进行分析,有一个方便的好工具 sp_blitzindex,您可以从 brentozar.com 下载它。

他有所有很棒的帖子讨论如何作为初学者使用并分析索引使用情况,这将为您提供除整体索引利用率之外的空间,这将帮助您缩小搜索范围,并可能更好地回答成本是多少。