EXPLAIN
语句提供了有关 MySQL 如何执行语句的信息:
EXPLAIN
适用于SELECT
、DELETE
、INSERT
、REPLACE
和UPDATE
语句。- 当
EXPLAIN
与可解释的语句一起使用时,MySQL 会显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句,包括关于表如何连接以及按何种顺序连接的信息。有关使用EXPLAIN
获取执行计划信息的信息,请参阅 8.8.2EXPLAIN
输出格式 。 - 当
EXPLAIN
与FOR CONNECTION connection_id
而不是可解释的语句一起使用时,它会显示在命名连接中执行的语句的执行计划。参见 8.8.4 为指定连接获取执行计划信息 。 - 对于
SELECT
语句,EXPLAIN
生成可以使用SHOW WARNINGS
显示的其他执行计划信息。参见 8.8.3EXPLAIN
扩展输出格式 。 EXPLAIN
对于检查涉及分区表的查询非常有用。参见 24.3.5 获取分区信息 。FORMAT
选项可用于选择输出格式。TRADITIONAL
以表格格式显示输出。如果没有FORMAT
选项,这是默认设置。JSON
格式以 JSON 格式显示信息。
在 EXPLAIN
的帮助下,您可以看到应该在哪里向表添加索引,以便通过使用索引查找行来更快地执行语句。您还可以使用 EXPLAIN
来检查优化器是否以最佳顺序联接表。要提示优化器使用与 SELECT
语句中表的顺序相对应的联接顺序,请以 SELECT STRIGHT_JOIN
而不仅仅是 SELECT
为该语句开头。(请参见 13.2.13 SELECT
语句)但是,STRIGHT_JOIN
可能会阻止索引的使用,因为它会禁用半联接转换。参见 8.2.2.1 使用半联接转换优化 IN
和 EXISTS
子查询谓词 。
优化器跟踪有时可以提供与 EXPLAIN
的信息互补的信息。但是,优化器跟踪(信息)的格式和内容可能会在不同版本之间发生变化。有关详细信息,请参见 MySQL 内部:跟踪优化器 。
如果您在认为应该使用索引的情况下没有使用索引,则运行 ANALYZE TABLE
来更新表统计信息,例如键的基数,这可能会影响优化器所做的选择。参见 13.7.3.1 ANALYZE TABLE 语句 。
注释
EXPLAIN
还可以用于获取有关表中列的信息。EXPLAIN tbl_name
与DESCRIBE tbl_name
和SHOW COLUMNS FROM tbl_name
同义。有关更多信息,请参阅 13.8.1 DESCRIBE 语句 和 13.7.7.5 SHOW COLUMNS 语句 。