我们知道在表上使用索引会降低插入/更新/删除(CUD)性能。 我想知道我是否使用字段作为包含列,影响(CUD)性能。
我的意思是,比较以下索引之间的性能下降:
CREATE UNIQUE NONCLUSTERED INDEX [Idx1] ON dbo.Table (Col1, Col2)
和
CREATE UNIQUE NONCLUSTERED INDEX [Idx1] ON dbo.Table (Col1, Col2) INCLUDE (Col3)
注意:
答案 0 :(得分:6)
如果INCLUDE
列涵盖查询,则该查询可能会快得多。缺点是使用索引的其他查询可能会稍慢。
此索引未涵盖的查询在使用此索引时可能会执行更多I / O.添加INCLUDE
列将扩大非聚集索引叶页上的行的大小。更宽的行意味着更少的行适合单个叶页。使用此索引查找许多行的查询将不得不加载更多页面。
INCLUDE列将导致索引占用更多磁盘空间。多少空间取决于列的数据类型。
如果扫描了许多行,索引可能会在内存中占用更多空间。
确定INCLUDE列影响的最佳方法是测量它。事先对表运行查询并测量I / O,磁盘空间并记录查询计划。之后对它运行查询并执行相同的操作。