在SQL Server中更新索引对性能有何影响?

时间:2019-03-06 16:07:29

标签: sql sql-server indexing

我正在优化数据库。我想知道当表中有〜9.000.000条记录时,对非聚集索引列执行更新时,对性能有何影响?

我知道对聚集索引列的更新涉及数据的“物理”移动。那非集群的呢?

我正在寻找一个索引,该索引用于查找68次,但在9.000.000条记录(非唯一)上更新了208.000次。我正在尝试确定性能的折衷。如果没有索引,则将使用全表扫描68次而不是查找(运行时为N = ~9.000.000)。这比对索引208.000次执行更新更糟糕吗?

谢谢

2 个答案:

答案 0 :(得分:1)

创建索引将需要一段时间,因为非聚集索引会占用其自己的存储空间。它不如添加/更改聚簇索引那么糟,聚簇索引必须重新排序并重新写入整个表数据。

但是,问题不仅仅在于一次创建所需的时间。相反,您必须确定服务器在每次插入,更新和删除语句时维护此索引的额外费用是否值得该索引有助于提供更快的查询。如果从该表中读取数据的频率比修改它们的频率高,或者如果有很多/频繁的查询使用此索引,请继续。如果上述事实中的任何一个都不成立,那么最​​好不要创建它。

答案 1 :(得分:1)

从您的问题来看,当比较208k次和68次时,索引似乎写得很重,很少读取。

但是,您可以删除索引吗?这取决于。

  • 如果您有SLA,则始终可以更快地返回68倍的数据。然后, 保持索引。

  • 如果您必须缩短事务更新时间,我会 建议您删除索引以使写入速度更快,并且可以承受 并因从表中读取而出现缓慢的情况很少见。