9

我在一个相当复杂的网站(PHP 驱动)中使用 MySQL。

理想情况下,我可以使用一个工具来帮助我测试我正在使用的 SQL 查询,并建议更好的表索引来提高性能并避免表扫描。

如果做不到这一点,它会告诉我每个查询的确切内容,这样我就可以自己执行优化。

编辑:理解 EXPLAIN ... 输出的简单指南也会很有用。

谢谢你。

4

6 回答 6

21

以下是关于 EXPLAIN 的一些信息(引用自 O'Reilly 的高性能 MySQL 书):

当您在查询上运行 EXPLAIN 时,它会以查询中涉及的每个表的报告的形式告诉您 MySQL 所知道的关于该查询的所有信息。

这些报告中的每一个都会告诉您...

  • 表的 ID(在查询中)
  • 表在更大选择中的作用(如果适用,如果它只有一个表,可能只会说简单)
  • 表的名称(duh)
  • 连接类型(如果适用,默认为const
  • 表上的索引列表(如果没有,则为 NULL),possible_keys
  • MySQL 决定使用的索引的名称,key
  • 键值的大小(以字节为单位)
  • ref显示用于匹配键的列或值
  • rows是 MySQL 认为它需要检查以满足查询的行数。这应该尽可能接近您计算的最小值!
  • ...然后 MySQL 希望传达的任何额外信息

这本书在提供这样的信息方面非常棒,所以如果你还没有,让你的老板签字同意购买。

否则,我希望一些知识渊博的 SO 用户可以提供帮助:)

于 2008-09-26T18:34:23.733 回答
4

作为最简单的事情,启用慢查询日志并查看哪些查询很慢,然后按照建议尝试分析它们。

于 2008-09-24T15:08:15.283 回答
3

那里可能有查询分析器,但对于简单的第一次切入,请使用 mysql 命令行,然后键入“explain select * from foo where bar = 'abc'”。确保您最常见的查询使用索引,尽量避免顺序扫描或大表排序。

于 2008-09-24T14:52:48.487 回答
3

EverSQL https://www.eversql.com

它将分析您的慢查询并生成索引并为您提供一些提示。

于 2020-05-30T20:52:27.097 回答
1

您应该研究一下Maatkit,这是一个用于执行各种 MySQL 任务的开源工具包。如果没有关于您要调整的确切内容的更多信息,很难告诉您将使用哪些工具以及如何使用,但文档非常好,它涵盖了很多应用程序。

于 2008-09-24T14:56:57.277 回答
0

我用于其余 sql 调整的工具 ( SQLyog ) 有一个包含分析器的新版本,这太棒了!(我不为他们工作——我只是使用他们的产品)

在此处输入图像描述

http://www.webyog.com/en/screenshots_sqlyog.php

于 2009-03-10T11:49:25.117 回答