该 EXPLAIN
语句提供了 MySQL 执行语句的信息:
-
当
EXPLAIN
与可解释语句一起使用时,MySQL 显示优化器关于语句执行计划的信息。也就是说,MySQL 解释了它如何处理语句,包括关于表如何连接和顺序的信息。有关使用EXPLAIN
获取执行计划信息的信息,请参阅 第 10.8.2 节,“EXPLAIN 输出格式”。 -
当
EXPLAIN
与FOR CONNECTION
一起使用,而不是与可解释语句一起使用时,它显示命名连接中的语句执行计划。请参阅 第 10.8.4 节,“获取命名连接的执行计划信息”。connection_id
-
对于
SELECT
语句,EXPLAIN
生产额外的执行计划信息,可以使用SHOW WARNINGS
显示。请参阅 第 10.8.3 节,“扩展 EXPLAIN 输出格式”。 -
EXPLAIN
对于涉及分区表的查询非常有用。请参阅 第 26.3.5 节,“获取分区信息”。 -
可以使用
FORMAT
选项选择输出格式。TRADITIONAL
以表格格式显示输出。这是默认格式,如果没有FORMAT
选项则使用该格式。JSON
格式以 JSON 格式显示信息。
使用 EXPLAIN
,您可以看到哪里应该添加索引以使语句执行速度更快,使用索引来查找行。您也可以使用 EXPLAIN
来检查优化器是否以最佳顺序连接表。要提示优化器使用与 SELECT
语句中表的顺序相对应的连接顺序,请在语句开头使用 SELECT STRAIGHT_JOIN
而不是简单的 SELECT
。(请参阅 第 15.2.13 节,“SELECT 语句”。)然而,STRAIGHT_JOIN
可能会阻止索引的使用,因为它禁用了半连接变换。请参阅 优化 IN 和 EXISTS 子查询谓词的半连接变换。
优化器跟踪有时可能提供与 EXPLAIN
相补充的信息。但是,优化器跟踪的格式和内容可能会在版本之间更改。有关详细信息,请参阅 MySQL Internals: 优化器跟踪。
如果您遇到索引未被使用的问题,而您认为它们应该被使用,请运行 ANALYZE TABLE
以更新表统计信息,如键的基数,这些信息可能会影响优化器的选择。请参阅 第 15.7.3.1 节,“ANALYZE TABLE 语句”。
EXPLAIN
也可以用于获取表中的列信息。EXPLAIN
等同于 tbl_name
DESCRIBE
和 tbl_name
SHOW COLUMNS FROM
。有关更多信息,请参阅 第 15.8.1 节,“DESCRIBE 语句” 和 第 15.7.7.6 节,“SHOW COLUMNS 语句”。tbl_name