问题 如何识别MySQL数据库中未使用的索引?


我最近完全重写了一个大项目。在这样做的过程中,我整合了大量随机MySQL查询。我记得在开发以前的代码库的过程中,我一时兴起创建了索引,我确信有很多不再使用的代码。

有没有办法监视MySQL的索引使用情况,以确定使用哪些索引,哪些索引不使用?


11725
2017-07-14 04:59


起源



答案:


我不认为这个信息在MySQL安装库存中可用。

Percona为MySQL提供工具和补丁来收集索引使用数据。

看到:

也可以看看:

您可能还对一个名为的Java应用程序感兴趣 MySQLIndexAnalyzer,这有助于找到  索引。但是这个工具不知道哪些索引未被使用。


14
2017-07-14 05:10



+1 - 我也推荐Percona补丁。我没有访问它们,所以最终记录每个查询运行,然后解析这个表离线运行EXPLAIN对查询和计算哪些索引/被使用,这将让我弄清楚哪些/没有' T /! - Dave Rix
@Dave Rix:考虑到这种情况,很好的解决方案。如果还记录了每个查询在日志中看到的次数,则可以将其映射到EXPLAIN为每个查询报告的索引,然后推断经常使用哪些索引与不经常使用。使用但很少使用的索引也可能是丢弃的候选者。 - Bill Karwin
你是对的 - 尽管有一个名为mysqlidxchx的旧工具,它在股票发行版中不可用。请看我帖子的最后两段: mysqlperformanceblog.com/2009/10/16/... - Morgan Tocker
@Morgan:感谢您的参考! - Bill Karwin


答案:


我不认为这个信息在MySQL安装库存中可用。

Percona为MySQL提供工具和补丁来收集索引使用数据。

看到:

也可以看看:

您可能还对一个名为的Java应用程序感兴趣 MySQLIndexAnalyzer,这有助于找到  索引。但是这个工具不知道哪些索引未被使用。


14
2017-07-14 05:10



+1 - 我也推荐Percona补丁。我没有访问它们,所以最终记录每个查询运行,然后解析这个表离线运行EXPLAIN对查询和计算哪些索引/被使用,这将让我弄清楚哪些/没有' T /! - Dave Rix
@Dave Rix:考虑到这种情况,很好的解决方案。如果还记录了每个查询在日志中看到的次数,则可以将其映射到EXPLAIN为每个查询报告的索引,然后推断经常使用哪些索引与不经常使用。使用但很少使用的索引也可能是丢弃的候选者。 - Bill Karwin
你是对的 - 尽管有一个名为mysqlidxchx的旧工具,它在股票发行版中不可用。请看我帖子的最后两段: mysqlperformanceblog.com/2009/10/16/... - Morgan Tocker
@Morgan:感谢您的参考! - Bill Karwin