时不时地运行 Microsoft SQL Server Profiler,它建议我创建一堆新的索引和统计信息(“...97% 估计改进...”)。
据我了解,每个添加的索引都可以使 SQLSELECT
查询更快,但也可以使UPDATE
orINSERT
查询变慢,因为必须调整索引。
我想知道的是,我什么时候有“太多”的索引/统计信息?
也许对此没有明确的答案,但有一些经验法则。
时不时地运行 Microsoft SQL Server Profiler,它建议我创建一堆新的索引和统计信息(“...97% 估计改进...”)。
据我了解,每个添加的索引都可以使 SQLSELECT
查询更快,但也可以使UPDATE
orINSERT
查询变慢,因为必须调整索引。
我想知道的是,我什么时候有“太多”的索引/统计信息?
也许对此没有明确的答案,但有一些经验法则。
您的负载配置文件是回答这个问题的最重要因素。
如果您的负载是读取密集型的,您希望索引能够满足最繁重或最频繁的查询。
如果您的负载是写密集型的,请仔细索引。例如,满足查找 UPDATE 需求的索引以及您的一两个最昂贵的 SELECT。
如果您的负载是 OLAP 负载,请谨慎使用索引,因为无论如何您都将扫描目标表。
你怎么知道你有太多的索引?
当您可以看到其中一些未被任何查询使用时。
频繁的 DELETE、UPDATE 或 INSERT 显示了一个查询计划,该计划涉及多个昂贵的索引更改(即非聚集索引insert、update或delete)。使用您的判断来确定对这些 DML 语句的惩罚是否值得您从必须更新的索引中获得的收益。
如果您有正在维护但从未使用(或很少使用)的索引,那么您的索引太多了。如果您的所有索引都用于提高用户性能,那么您没有太多索引。