2010-07-14 31 views
11

我最近完全重写了一个大型项目。在这样做的时候,我整理了大量的随机MySQL查询。我记得在开发以前的代码库的过程中,我创建了索引,我确信有很多不再使用的数字。如何识别MySQL数据库中未使用的索引?

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

回答

14

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

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

参见:

参见:

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

+1

+1 - 我也会推荐Percona补丁。我没有访问它们,所以最终记录了每个查询运行,然后解析这个表离线运行EXPLAIN对查询和计算哪些索引/被使用,然后让我找出哪些/不是, T /! – 2010-07-14 06:27:33

+0

@Dave Rix:考虑到这种情况的好方法。如果您还记录每条查询在日志中出现的次数,则可以将其映射到由EXPLAIN报告的每个查询所报告的索引,然后推断哪些索引经常使用而不经常使用。一个被使用但很少使用的索引也可能成为删除的候选对象。 – 2010-07-14 06:52:43

+0

你是对的 - 尽管有一个名为mysqlidxchx的旧工具,但它并不在股票发行版中。看到我的帖子最后两段在这里: http://www.mysqlperformanceblog.com/2009/10/16/how-not-to-find-unused-indexes/ – 2010-07-23 16:20:01