8.8.1 使用 EXPLAIN 优化查询
EXPLAIN语句提供有关 MySQL 如何执行语句的信息:
-
当EXPLAIN与可解释的语句一起使用时,MySQL 将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句,包括有关如何连接 table 以及以何种 Sequences 连接 table 的信息。有关使用EXPLAIN获取执行计划信息的信息,请参见第 8.8.2 节“ EXPLAIN 输出格式”。
-
当EXPLAIN与
FOR CONNECTION connection_id
而不是可解释的语句一起使用时,它将显示在命名 Connecting 执行的语句的执行计划。参见第 8.8.4 节“获取命名连接的执行计划信息”。 -
对于SELECT语句,EXPLAIN生成可以使用SHOW WARNINGS显示的其他执行计划信息。参见第 8.8.3 节“扩展的 EXPLAIN 输出格式”。
-
EXPLAIN对于检查涉及分区 table 的查询很有用。参见第 22.3.5 节“获取有关分区的信息”。
-
FORMAT
选项可用于选择输出格式。TRADITIONAL
以 table 格格式显示输出。如果不提供FORMAT
选项,则为默认设置。JSON
格式以 JSON 格式显示信息。
借助EXPLAIN,您可以看到应该向 table 中添加索引的位置,以便通过使用索引查找行来使语句更快地执行。您还可以使用EXPLAIN来检查优化器是否以最佳 Sequences 连接 table。为了提示优化器使用与SELECT语句中 table 的命名 Sequences 相对应的连接 Sequences,请以SELECT STRAIGHT_JOIN
而不是SELECT开头该语句。 (请参见第 13.2.9 节“ SELECT 语句”。)但是,STRAIGHT_JOIN
可能会禁止使用索引,因为它禁用了半联接转换。参见第 8.2.2.1 节“使用半联接转换优化子查询,派生 table 和视图引用”。
优化器跟踪有时可能提供与EXPLAIN互补的信息。但是,优化程序的跟踪格式和内容在版本之间可能会发生变化。有关详细信息,请参见MySQL 内部:跟踪优化器。
如果您在认为应该使用索引时遇到问题,请运行ANALYZE TABLE以更新 table 统计信息(例如,键的基数),这可能会影响优化器的选择。参见第 13.7.2.1 节“ ANALYZE TABLE 语句”。
Note
EXPLAIN也可用于获取有关 table 中列的信息。 EXPLAIN tbl_name与DESCRIBE tbl_name
和SHOW COLUMNS FROM tbl_name
同义。有关更多信息,请参见第 13.8.1 节“ DESCRIBE 语句”和第 13.7.5.5 节“ SHOW COLUMNS 语句”。