首页 > 解决方案 > SQL Server 几乎重复的索引 - 删除哪一个

问题描述

我有一个带有两个非聚集索引的表。两者都具有相同的键列,并且都具有相同的 INCLUDE 列,除了一列,否则它们是相同的。

我需要删除一个,因为不需要两个几乎相同的索引。我正在查看使用 sp_BlitzIndex 返回的 Usage Stats 和 Op Stats。

使用统计
索引 A:读取:652,366(652,366 次查找)写入:3,297,125
索引 B(在 INCLUDE 中有附加列):读取 644,443(640,332 次查找 4,111 次扫描)写入:3,897,213

Op Stats
Index A:536,711 个单例查找;1,239,859 次扫描/搜索;423,781 次删除;5,125 次更新
索引 B:(在 INCLUDE 中有附加列):1,070,124 次单例查找;1,225,548 次扫描/搜索;913,185 次删除;5,127 次更新。

索引 A 具有更多的查找读取,但更少的单例查找。我的第一选择是将索引与附加列(索引 B)一起保留,因为我认为从长远来看它会涵盖更多查询。我应该只专注于读取并保留索引 A 吗?

编辑:有问题的表有 22 个索引,包括由先前的 DBA 添加的两个有问题的索引。当它们非常相似时,似乎没有必要同时拥有这两个索引,并且我正在尝试减少此表上如此多索引的开销,因为它似乎会影响性能。我确实意识到正确的索引可能很棘手,所以我想我只是在问我提供的 Usage 和 Op 统计数据是否应该引导我可能消除一个或另一个,或者两者都没有。

标签: sql-serverindexingduplicatesinclude

解决方案


为什么你“需要”放弃一个?除非由于不断更新数据从而更新索引而导致性能下降,否则两者仍然可以为您的选择带来好处,而影响最小。

您是否在正常使用情况下运行过跟踪并进行分析以查看没有索引的情况下对您有什么好处?你可以学到很多关于这样做的事情。


推荐阅读