2010-05-24 74 views
0

我在MySQL中有一个表,有7个索引,其中大多数都在多个列上。我觉得这里索引太多了。有没有什么办法可以获得数据库所有数千个查询使用哪些索引的统计数据,哪些数据不太值得我知道哪些索引要考虑首先删除?如何识别哪些索引未被使用?

回答

3

你可以尝试确定which indexes are used at all.

然而,就作为一个有用的列表,对不起,没有内置的方法来做到这一点,我不认为查询分析器甚至做到这一点。

您似乎可能需要执行审计以确定正在使用的影响该表的查询,并对它们进行解释以查看它们是否使用了任何索引。

有一个错误报告requesting this feature

0

这不是一个具体的做法,但你可能会说。尝试EXPLAIN SELECT...,它会告诉你正在使用哪些表,有多少行,等等,等等这应该给你足够的数据来加速你的表

+0

是的,但我有这么多的疑问 – 2010-05-24 21:37:59

0

打开生产中的一般查询日志记录。是的,我知道这很痛苦,我知道它会影响你的生产服务器,但是BITE THE BULLET。稍后会有用。如果可能的话,让它无限期地打开(当然要确保日志的旋转,压缩和过期能够正常工作,并且绝对监控磁盘空间的使用情况;告诉Ops如果在坏事情发生时如何关闭它)

然后, mk-query-digest将在您的所有查询中运行EXPLAIN(当然,这是针对非生产数据库执行的,但使用生产数据库的最近转储)。

这将使您能够确定哪些索引正在使用以及使用频率。至少,如果EXPLAIN没有说谎,并且您的测试服务器使用与生产相同的计划。

或者至少,它大多会。 EXPLAIN还没有告诉你DELETE,UPDATE查询是如何工作的。