【问题标题】:Performance effect of include column in index索引中包含列的性能影响
【发布时间】:2016-02-17 19:41:02
【问题描述】:

我们知道,在表上设置索引会降低插入/更新/删除 (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 亿行

【问题讨论】:

标签: sql-server indexing database-performance


【解决方案1】:

如果INCLUDE 列包含一个查询,那么该查询可能会快得多。缺点是其他使用索引的查询可能会稍微慢一些。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2013-11-26
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多