Mysql 执行计划

参考文档

https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
https://dev.mysql.com/doc/refman/5.7/en/explain.html
https://blog.csdn.net/baiducheng/article/details/79725535

语法

{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
}

EXPLAIN 、DESCRIBE 、DESC效果是一样的,DESCRIBE、DESC多用于查看表结构,类似于SHOW COLUMNS,例如,

mysql> desc select * from purchase_order;
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | purchase_order | ALL  | NULL          | NULL | NULL    | NULL |  158 | NULL  |
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
mysql> explain  select * from purchase_order;
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | purchase_order | ALL  | NULL          | NULL | NULL    | NULL |  158 | NULL  |
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
1 row in set (0.01 sec)

mysql> show columns in  purchase_order;
+-------------------+---------------+------+-----+---------+----------------+
| Field             | Type          | Null | Key | Default | Extra          |
+-------------------+---------------+------+-----+---------+----------------+
| id                | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| serial_number     | char(19)      | YES  |     | NULL    |                |
+-------------------+---------------+------+-----+---------+----------------+
20 rows in set (0.00 sec)

mysql> desc purchase_order;
+-------------------+---------------+------+-----+---------+----------------+
| Field             | Type          | Null | Key | Default | Extra          |
+-------------------+---------------+------+-----+---------+----------------+
| id                | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| serial_number     | char(19)      | YES  |     | NULL    |                |
+-------------------+---------------+------+-----+---------+----------------+
20 rows in set (0.00 sec)

SHOW COLUMNS Syntax

一个简单的执行计划

在sql前面加EXPLAIN查看执行假话

mysql> EXPLAIN  SELECT * from purchase_order;
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | purchase_order | ALL  | NULL          | NULL | NULL    | NULL |   11 | NULL  |
+----+-------------+----------------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)

先概括的看一下执行计划返回列的含义

说明
select_typeselect类型
table输出结果集的表
type访问类型

下面详细介绍以下每个列的含义

  • select_type

这个参数表示select类型,每个取值代表的含义如下

取值说明
SIMPLE简单表,即不使用关联查询、自查询
PRIMARY主查询,即最外层的查询
SUBQUERY子查询的第一个select
UNIONUNION中的第二个或者后面的查询语句
  • type

从上之下,性能由差变强

取值说明
ALL全表扫描,mysql遍历全表来找到匹配的行
index索引全扫描,mysql遍历全部索引来查询匹配的行
range索引范围扫描,常见的操作符,<,<=,>,>=,between
ref使用非唯一索引扫描、唯一索引前缀扫描
eq_ref唯一索引
const,system
NULLmysql不访问索引或者表,就能返回结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值