如何知道何时/是否索引过多?


26

时不时地运行Microsoft SQL Server Profiler,它建议我创建一系列新的索引和统计信息(“ ... 97%的预期改进...”)。

据我了解,每个增加的索引都可以使SQL SELECT查询更快,但由于必须调整索引,因此SQL UPDATE或SQL 查询的速度也会INSERT变慢。

我想知道的是,什么时候会有“太多”的索引/统计信息?

也许对此没有明确的答案,但有一些经验法则。



谢谢@尼克。在发布问题之前,我仔细搜索了Google和dba.se.com。我认为,这是无关紧要的。我不想知道是否需要索引,而是想知道什么时候确定太多索引构成UPDATEINSERT语句太慢。
Uwe Keim

3
你在那里读答案了吗?例如,可接受的答案链接到一些分析脚本,这些脚本可以帮助您确定应删除的未使用索引。您可能会发现这对于回答何时有“太多”索引的问题很有帮助。
Nick Chammas

Answers:


24

负载配置文件是回答此问题的最重要因素。

  • 如果您的负载是读取密集型,则您希望索引满足您最繁重或最频繁的查询。

  • 如果您的负载是写密集型的,请仔细索引。例如,满足寻求UPDATE需求的索引以及您的一两个最昂贵的SELECTs。

  • 如果您的负载是OLAP负载,请谨慎索引,因为无论如何您都将扫描目标表。

您怎么知道索引太多?

  • 当您看到其中一些未被任何查询使用时。

  • 频繁的DELETE,UPDATE或INSERT会显示查询计划,该计划涉及多个昂贵的索引更改(即,非聚集索引insertupdatedelete)。使用您的判断来确定对那些DML语句的惩罚是否值得您从必须更新的索引中获得的收益。


8

如果您有正在维护但从未使用过(或很少使用)的索引,那么您将需要许多索引。如果您所有的索引都被用来提高用户性能,那么您就不需要太多了。


我建议改变“两个OCCURENCES ”到“ ”,因为我不能编辑它们看作是我的编辑需要改变6最小字符?
Uwe Keim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.