找到未使用的索引

时间:2013-08-21 19:23:57

标签: mysql indexing

在现有的MYSQL安装中,使用哪种方法来查找未使用的索引? Percona有工具,但这些盒子是亚马逊RDS实例,因此我们无法使用这些工具使用螺母和螺栓。

我确实找到了http://hackmysql.com/mysqlidxchk,我认为这可能是我唯一的选择。我可以手动梳理并查找带有重复前导键的索引,但这似乎也适得其反。

我还没有看到其他解决方案吗?

2 个答案:

答案 0 :(得分:4)

是的,有pt-index-usage,但您不一定需要针对您的RDS实例运行它。

您可以收集查询日志,*然后针对在任何地方运行的数据库快照运行pt-index-usage,即使在您的笔记本电脑上也是如此。该工具只对日志中的所有查询运行EXPLAIN,然后报告数据库中存在但未被任何EXPLAIN报告使用的任何索引。

RDS仅支持基于表的查询日志,请注意由此引起的开销。

在将其用作pt-index-usage的输入之前,您需要导出基于表的查询日志。这是一个可以执行导出的脚本:https://github.com/billkarwin/bk-tools/blob/master/export-slow-log-table

MySQL 5.6还有一个新的performance_schema表table_io_waits_summary_by_index_usage(参见http://dev.mysql.com/doc/refman/5.6/en/table-waits-summary-tables.html),您可以启用它来查明每个索引从磁盘加载到RAM的频率,因此正在使用它。虽然您可能没有使用MySQL 5.6,但我不知道您是否可以在RDS上启用performance_schema选项。


我在Percona的同事发布了一个博客,确认您可以在Amazon RDS上启用performance_schema,但不是通过Web UI。 http://www.mysqlperformanceblog.com/2013/08/21/amazon-rds-with-mysql-5-6-configuration-variables/

答案 1 :(得分:0)

在这方面,

EXPLAIN以及您的查询会很有帮助。尝试一下,如果它没有帮助,那么说,你想知道的那些作为评论遗漏,我会调查它。