我在MySQL中有一个表,有7个索引,其中大多数都在多个列上。我觉得这里索引太多了。有没有什么办法可以获得数据库所有数千个查询使用哪些索引的统计数据,哪些数据不太值得我知道哪些索引要考虑首先删除?如何识别哪些索引未被使用?
0
A
回答
3
你可以尝试确定which indexes are used at all.
然而,就作为一个有用的列表,对不起,没有内置的方法来做到这一点,我不认为查询分析器甚至做到这一点。
您似乎可能需要执行审计以确定正在使用的影响该表的查询,并对它们进行解释以查看它们是否使用了任何索引。
有一个错误报告requesting this feature。
0
这不是一个具体的做法,但你可能会说。尝试EXPLAIN SELECT...
,它会告诉你正在使用哪些表,有多少行,等等,等等这应该给你足够的数据来加速你的表
0
打开生产中的一般查询日志记录。是的,我知道这很痛苦,我知道它会影响你的生产服务器,但是BITE THE BULLET。稍后会有用。如果可能的话,让它无限期地打开(当然要确保日志的旋转,压缩和过期能够正常工作,并且绝对监控磁盘空间的使用情况;告诉Ops如果在坏事情发生时如何关闭它)
然后, mk-query-digest将在您的所有查询中运行EXPLAIN(当然,这是针对非生产数据库执行的,但使用生产数据库的最近转储)。
这将使您能够确定哪些索引正在使用以及使用频率。至少,如果EXPLAIN没有说谎,并且您的测试服务器使用与生产相同的计划。
或者至少,它大多会。 EXPLAIN还没有告诉你DELETE,UPDATE查询是如何工作的。
1
您应该查看Percona修补程序或其服务器版本。他们已将表添加到INFORMATION_SCHEMA中,以便您可以找到未使用的索引。
链接:
相关问题
- 1. 如何识别用户选择哪些?
- 2. 如何识别MySQL数据库中未使用的索引?
- 3. $ _POST ['variable'],变量未被识别(“未定义索引”)
- 4. 如何识别哪些类型可以被基因化?
- 5. CTE未被识别
- 6. JSON未被识别
- 7. 'javac'未被识别
- 8. DLL未被识别
- 9. Swift:UITextField未被识别
- 10. 如何识别哪个销被挖掘
- 11. $ _Session数组未识别索引
- 12. 未识别的索引错误PHP
- 13. 多个$ _FILES在控制器中未被识别(未定义的索引)
- 14. 通知未被识别
- 15. meta_where代码未被识别
- 16. R CMD roxygen未被识别
- 17. 元素未被识别
- 18. $ {GIT_BRANCH}未被Jenkins识别
- 19. 最大值未被识别
- 20. XML内容未被识别
- 21. JDABuilder未被Eclipse识别
- 22. iCal未被Google识别
- 23. Grails 3.1.9:POST未被识别
- 24. EntityFramework DataContext未被识别
- 25. css文件未被识别
- 26. JQ未被AppleScript识别
- 27. 如何识别未使用的CSS类?
- 28. 如何轻松查看哪些资产未被使用?
- 29. 如何判断ALL_TAB_COLS中哪些列未被使用?
- 30. 如何识别哪些缺失的Java库使JAXB工作?
是的,但我有这么多的疑问 – 2010-05-24 21:37:59