索引中包含列的性能影响

时间:2016-02-17 19:41:02

标签: sql-server indexing database-performance

我们知道在表上使用索引会降低插入/更新/删除(CUD)性能。 我想知道我是否使用字段作为包含列,影响(CUD)性能。

我的意思是,比较以下索引之间的性能下降:

CREATE UNIQUE NONCLUSTERED INDEX [Idx1] ON dbo.Table (Col1, Col2)

CREATE UNIQUE NONCLUSTERED INDEX [Idx1] ON dbo.Table (Col1, Col2) INCLUDE (Col3)

注意:

  1. Col3是一个小字段(如int / decimal / date)
  2. 该表有大约1亿行

1 个答案:

答案 0 :(得分:6)

如果INCLUDE列涵盖查询,则该查询可能会快得多。缺点是使用索引的其他查询可能会稍慢。

此索引未涵盖的查询在使用此索引时可能会执行更多I / O.添加INCLUDE列将扩大非聚集索引叶页上的行的大小。更宽的行意味着更少的行适合单个叶页。使用此索引查找许多行的查询将不得不加载更多页面。

INCLUDE列将导致索引占用更多磁盘空间。多少空间取决于列的数据类型。

如果扫描了许多行,索引可能会在内存中占用更多空间。

确定INCLUDE列影响的最佳方法是测量它。事先对表运行查询并测量I / O,磁盘空间并记录查询计划。之后对它运行查询并执行相同的操作。