{EXPLAIN | DESCRIBE | DESC}
tbl_name [col_name | wild]
{EXPLAIN | DESCRIBE | DESC}
[explain_type]
{explainable_stmt | FOR CONNECTION connection_id}
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将如何执行查询的解释)。
以下讨论
根据这些用途使用DESCRIBE
和
EXPLAIN
关键字,但 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.5 节,“显示列语句”。
默认情况下,DESCRIBE
显示有关表中所有列的信息。
col_name
,如果给定,是表中列的名称。在这种情况下,该语句仅显示指定列的信息。
wild
,如果给定,是一个模式字符串。它可以包含 SQL%
和
_
通配符。在这种情况下,该语句仅显示名称与字符串匹配的列的输出。除非字符串包含空格或其他特殊字符,否则无需将字符串括在引号内。
提供该DESCRIBE
语句是为了与 Oracle 兼容。
、SHOW CREATE TABLE
和
语句还提供有关表的信息SHOW TABLE STATUS
。
SHOW INDEX
请参阅第 13.7.5 节,“SHOW 语句”。
该EXPLAIN
语句提供了有关 MySQL 如何执行语句的信息:
当
EXPLAIN
与可解释的语句一起使用时,MySQL 会显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句,包括有关表如何连接以及连接顺序的信息。有关使用EXPLAIN
获取执行计划信息的信息,请参阅第 8.8.2 节,“EXPLAIN 输出格式”。当
EXPLAIN
与 而不是可解释的语句一起使用时,它显示在命名连接中执行的语句的执行计划。请参阅第 8.8.4 节,“获取命名连接的执行计划信息”。FOR CONNECTION
connection_id
对于
SELECT
语句,EXPLAIN
生成可以使用显示的附加执行计划信息SHOW WARNINGS
。请参阅 第 8.8.3 节,“扩展 EXPLAIN 输出格式”。笔记在较旧的 MySQL 版本中,扩展信息是使用
EXPLAIN EXTENDED
. 该语法仍然被识别为向后兼容,但扩展输出现在默认启用,因此该EXTENDED
关键字是多余的且已弃用。它的使用会导致警告,并从EXPLAIN
MySQL 8.0 的语法中删除。EXPLAIN
对于检查涉及分区表的查询很有用。请参阅 第 22.3.5 节,“获取有关分区的信息”。笔记在较旧的 MySQL 版本中,分区信息是使用
EXPLAIN PARTITIONS
. 该语法仍然被识别为向后兼容,但分区输出现在默认启用,因此该PARTITIONS
关键字是多余的且已弃用。它的使用会导致警告,并从EXPLAIN
MySQL 8.0 的语法中删除。该
FORMAT
选项可用于选择输出格式。TRADITIONAL
以表格格式显示输出。如果没有FORMAT
选项,这是默认值。JSON
format 以 JSON 格式显示信息。
EXPLAIN
需要执行解释语句所需的相同权限。此外,EXPLAIN
还需要SHOW VIEW
任何解释视图的权限。
在 的帮助下EXPLAIN
,您可以看到应该在何处向表添加索引,以便通过使用索引查找行来更快地执行语句。您还可以使用它
EXPLAIN
来检查优化器是否以最佳顺序连接表。要提示优化器使用与表在语句中的命名顺序相对应的连接顺序,请
以而不是仅以.SELECT
开始语句。(请参阅
第 13.2.9 节,“SELECT 语句”。)
SELECT STRAIGHT_JOIN
SELECT
优化器跟踪有时可能会提供与EXPLAIN
. 但是,优化器跟踪格式和内容可能会因版本而异。有关详细信息,请参阅
MySQL 内部结构:跟踪优化器。
如果您遇到索引在您认为应该使用时未被使用的问题,请运行ANALYZE
TABLE
以更新表统计信息,例如键的基数,这可能会影响优化器所做的选择。请参阅
第 13.7.2.1 节,“ANALYZE TABLE 语句”。
MySQL Workbench 具有 Visual Explain 功能,可提供
EXPLAIN
输出的可视化表示。请参阅
教程:使用 Explain 提高查询性能。