sql-server - 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 统计数据是否应该引导我可能消除一个或另一个,或者两者都没有。
解决方案
为什么你“需要”放弃一个?除非由于不断更新数据从而更新索引而导致性能下降,否则两者仍然可以为您的选择带来好处,而影响最小。
您是否在正常使用情况下运行过跟踪并进行分析以查看没有索引的情况下对您有什么好处?你可以学到很多关于这样做的事情。
推荐阅读
- javascript - 避免图表加载新旧数据相邻
- javascript - 无法将文本分配给 Node 中的 const
- unity3d - 如何使用 Arcore Unity 更改生成图像的颜色
- python - 如何使用opencv将两个鼠标坐标[(x0,y0),(x1,y1)]导出到python中的txt文件
- url - HAproxy - 如何在不允许任何路径的情况下匹配给定的 URL?
- parse-server - 如何使用 Parse-Server 发送 Ionic 推送通知?
- random - 为什么我的“随机密钥代码”每隔一段时间就会创建一个相同的密钥?
- amazon-web-services - 从 s3 cp 命令到 gzip 的 Powershell 管道标准输出
- c# - 如何通过事件保持变量?
- kotlin - 如何处理来自 Kotlin 的 find 函数的 null 返回?