MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.8 效用语句  /  13.8.2 EXPLAIN 语句

13.8.2 EXPLAIN 语句

{EXPLAIN | DESCRIBE | DESC}
    tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}
    [explain_type]
    explainable_stmt

explain_type: {
    EXTENDED
  | PARTITIONS
  | FORMAT = format_name
}

format_name: {
    TRADITIONAL
  | JSON
}

explainable_stmt: {
    SELECT statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
}

DESCRIBE语句 EXPLAIN是同义词。在实践中,DESCRIBE关键字更多的是用来获取表结构的信息,而EXPLAIN用来获取查询的执行计划(即MySQL将如何执行查询的解释)。

以下讨论 根据这些用途使用DESCRIBEEXPLAIN关键字,但 MySQL 解析器将它们视为完全同义词。

获取表结构信息

DESCRIBE提供有关表中列的信息:

mysql> DESCRIBE City;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name       | char(35) | NO   |     |         |                |
| Country    | char(3)  | NO   | UNI |         |                |
| District   | char(20) | YES  | MUL |         |                |
| Population | int(11)  | NO   |     | 0       |                |
+------------+----------+------+-----+---------+----------------+

DESCRIBE是 的快捷方式 SHOW COLUMNS。这些语句还显示视图的信息。的描述 SHOW COLUMNS提供了有关输出列的更多信息。请参阅 第 13.7.5.6 节,“显示列语句”

默认情况下,DESCRIBE显示有关表中所有列的信息。 col_name,如果给定,是表中列的名称。在这种情况下,该语句仅显示指定列的信息。 wild,如果给定,是一个模式字符串。它可以包含 SQL%_通配符。在这种情况下,该语句仅显示名称与字符串匹配的列的输出。除非字符串包含空格或其他特殊字符,否则无需将字符串括在引号内。

提供该DESCRIBE语句是为了与 Oracle 兼容。

SHOW CREATE TABLE和 语句还提供有关表的信息SHOW TABLE STATUSSHOW INDEX请参阅第 13.7.5 节,“SHOW 语句”

获取执行计划信息

EXPLAIN语句提供了有关 MySQL 如何执行语句的信息:

EXPLAIN需要执行解释语句所需的相同权限。此外,EXPLAIN还需要SHOW VIEW任何解释视图的权限。

在 的帮助下EXPLAIN,您可以看到应该在何处向表添加索引,以便通过使用索引查找行来更快地执行语句。您还可以使用它 EXPLAIN来检查优化器是否以最佳顺序连接表。要提示优化器使用与表在语句中的命名顺序相对应的连接顺序,请 以而不是仅以.SELECT开始语句。(请参阅 第 13.2.9 节,“SELECT 语句”。) SELECT STRAIGHT_JOINSELECT

如果您遇到索引在您认为应该使用时未被使用的问题,请运行ANALYZE TABLE以更新表统计信息,例如键的基数,这可能会影响优化器所做的选择。请参阅 第 13.7.2.1 节,“ANALYZE TABLE 语句”

笔记

MySQL Workbench 具有 Visual Explain 功能,可提供 EXPLAIN输出的可视化表示。请参阅 教程:使用 Explain 提高查询性能