MySQL是否有一个很好的工具可以帮助我优化查询和索引设置?

时间:2020-03-06 14:40:04  来源:igfitidea点击:

我在相当复杂的网站(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