mysql describe_mysql8 参考手册--EXPLAIN、DESCRIBE语句

{EXPLAIN | DESCRIBE | DESC}

tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}

[explain_type]

{explainable_stmt | FOR CONNECTION connection_id}

{EXPLAIN | DESCRIBE | DESC} ANALYZE select_statement

explain_type: {

FORMAT = format_name

}

format_name: {

TRADITIONAL

| JSON

| TREE

}

explainable_stmt: {

SELECT statement

| TABLE statement

| DELETE statement

| INSERT statement

| REPLACE statement

| UPDATE statement

}

DESCRIBE和 EXPLAIN语句是同义词。实际上,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.7.5节“ SHOW COLUMNS语句”。

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

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

的SHOW CREATE TABLE, SHOW TABLE STATUS和 SHOW INDEX语句也可以提供有关表的信息。请参见第13.7.7节“ SHOW语句”。

获取执行计划信息

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

EXPLAIN作品有 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。在MySQL 8.0.19和更高版本中,它也可用于 TABLE语句。

当EXPLAIN与可解释的语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理该语句,包括有关如何连接表以及以何种顺序连接表的信息。有关 EXPLAIN用于获取执行计划信息的信息,请参见第8.8.2节“ EXPLAIN输出格式”。

当EXPLAIN与FOR CONNECTION CONNECTION\u id一起使用而不是可解释的语句时,它将显示在命名连接中执行的语句的执行计划。

对于可解释的语句, EXPLAIN生成可以使用来显示的其他执行计划信息 SHOW WARNINGS。

EXPLAIN对于检查涉及分区表的查询很有用。

该FORMAT选项可用于选择输出格式。TRADITIONAL以表格格式显示输出。如果不FORMAT存在任何选项,则为默认设置 。 JSONformat以JSON格式显示信息。在MySQL 8.0.16和更高版本中, TREE提供了类似于TRADITIONAL格式的树状输出,其中对查询处理的描述更为精确 。它是唯一显示哈希联接用法的格式(请参见 第8.2.1.4节“哈希联接优化”),并且始终用于 EXPLAIN ANALYZE。

EXPLAIN需要对所 SELECT访问的任何表或视图(包括视图的任何基础表)具有特权。对于视图,EXPLAIN还需要 SHOW VIEW特权。 如果指定的连接属于其他用户,则EXPLAIN ... FOR CONNECTION还需要 PROCESS特权。

在的帮助下EXPLAIN,您可以看到应该在表中添加索引的位置,以便通过使用索引查找行来使语句更快地执行。您还可以 EXPLAIN用来检查优化器是否以最佳顺序联接表。要提示优化器使用连接顺序,该连接顺序与SELECT语句中表的命名顺序相对应,请以 SELECT STRAIGHT_JOIN而不是just 开头SELECT。

优化程序跟踪有时可能提供与补充的信息EXPLAIN。但是,优化程序的跟踪格式和内容在版本之间可能会发生变化。有关详细信息,请参见 MySQL内部:跟踪优化器。

如果您在认为应该使用索引时遇到问题,请运行ANALYZE TABLE以更新表统计信息,例如键的基数,这可能会影响优化器的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值