describe在mysql的缩写_MySQL describe和explain语句

1. DESCRIBE语句

DESCRIBE和EXPLAIN是同义词,被用来获取表结构或者查询执行计划的信息。更多信息,可以参考SHOW COLUMNS语句和EXPLAIN语句。

2. EXPLAIN 语句

{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

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的缩写。这些语句也展示视图的信息。

默认情况下,DESCRIBE展示表中所有列的信息。如果给定了列名,就只展示给定列的信息。列名也可以含有通配符%。

mysql> DESCRIBE City `%c%`

SHOW CREATE TABLE, SHOW TABLE STATUS 和 SHOW INDEX 语句也提供表的信息。

获取执行计划信息

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

EXPLAIN和SELECT, DELETE , INSERT, REPLACE, UPDATED语句一起使用。

当EXPLAIN和一个可以执行的语句一起使用时,MySQL展示来自优化器关于语句执行计划的信息。就是说,MySQL解释如果处理语句,包括表如何连接,以及怎么排序。更多关于EXPLAIN的输出查询计划的信息,参考EXPLAIN Output Format。

当EXPLAIN和FOR CONNECTION connection_id使用,而不是一个可执行的语句时,它展示在指定链接中的语句执行计划。参考Obtaining Execution Plan Information for a Named Connection。

对于SELECT语句,EXPLAIN生成可以额外的执行计划信息,就是可以用SHOW WARNINGS展示的信息。参考Extended EXPLAIN Output Format。

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

FORMAT选项可以被用来选择输出格式。TRADITIONAL表示用表的格式输出。如果没有FORMAT选项,这是默认的。JSON格式就是用JSON格式显示。

mysql> desc FORMAT=JSON select count(1) from factory_info;

EXPLAIN要求有任意访问的表或者视图的SELECT权限,包括视图底层的表。对于视图,EXPLAIN也要求SHOW VIEW权限。

有了EXPLAIN的帮助,你可以看见哪里应该加索引以便语句执行更快。你可以可以用EXPLAIN检查优化器是否以更好的顺序链接表。为了提示优化器的SELECT语句按指定顺序连接表,在语句的开头可以使用SELECT STRAIGHT_JOIN而不是SELECT。

优化器追踪有时提供的信息与EXPLAIN的互补。然而,优化器追踪格式和内容随着版本变化而变化。更多细节,参考MySQL Internals: Tracing the Optimizer.

如果你怀疑索引使用的有问题,可以运行ANALYZE TABLE来更新表统计信息,例如索引的基数,这会影响优化器做出的选择。参考ANALYZE TABLE Statement。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值