MySQL是否有一个很好的工具可以帮助我优化查询和索引设置?
我在相当复杂的网站(PHP驱动)中使用MySQL。
理想情况下,应该有一个我可以使用的工具,该工具可以帮助我测试正在使用的SQL查询并建议更好的表索引,从而可以提高性能并避免表扫描。
失败的话,它会告诉我每个查询的确切信息,因此我可以自己执行优化。
编辑:了解EXPLAIN ...输出的简单指南也很有用。
谢谢你。
解决方案
那里可能有查询分析器,但是对于它来说很简单
使用mysql命令行,然后键入" explain select * from foo where bar ='abc'"。确保最常见的查询正在使用索引,并尝试避免顺序扫描或者各种大表。
我们应该研究Maatkit,这是一个用于执行各种MySQL任务的开源工具包。如果没有关于我们要调整的确切信息的更多信息,很难告诉我们将要使用哪些工具以及如何使用,但是该文档非常出色,涵盖了许多应用程序。
最简单的方法是,启用"慢速查询日志"并查看哪些查询慢速,然后尝试按照建议进行分析。
好吧,在我回答之前,订阅MySQL Performance Blog,我学到了很多东西(我以为我已经对MySQL了如指掌)。另外,他在这里有一个bitchin的工具页面。
其次,这是有关EXPLAIN的一些信息(引自O'Reilly的高性能MySQL书):
在查询上运行EXPLAIN时,它将以报告的形式为查询中涉及的每个表告知MySQL有关该查询的所有信息。
这些报告中的每一个都会告诉我们...
- 表的ID(在查询中)
- 该表在较大选择中的作用(如果适用,如果它只是一个表,则可能只说"简单")
- 表格名称(duh)
- 联接类型(如果适用,默认为const)
- 表上的索引列表(如果没有索引,则为NULL),possible_keys
- MySQL决定使用的索引名称,键
- 键值的大小(以字节为单位)
- ref显示用于与键匹配的列或者值
- rows是MySQL认为需要满足查询条件的行数。该值应尽可能接近我们所计算的最小值!
- ...然后MySQL希望传达的任何其他信息
这本书在提供这样的信息方面非常出色,因此,如果我们还没有,请让老板签字同意购买。
否则,我希望一些知识渊博的SO用户可以提供帮助:)
我在其余的SQL调整中使用的工具(SQLyog)具有一个新的版本,其中包括一个分析器,太棒了! (我不为他们工作,我只是使用他们的产品)
http://www.webyog.com/zh-CN/screenshots_sqlyog.php