Explain详解

2018-01-10  本文已影响0人  iamlyly

最近在看mysql 优化,可以用Explain 关键字来查看select sql 的执行计划。

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

id:根据官方的文档,ID是每一个SELECT查询才会有分配的,如果这样就好理解了

你的1, 2虽然跨表,但是是在一个SELECT中,所以id相同也就不奇怪,3包含了一个子查询,所以ID也就不同了
这个ID绝对不是执行顺序,执行顺序由SQL引擎来决定,这里的ID只是一个解析顺序,单纯的理解SQL为由内向外执行是非常错误的

selectType:标识每个select子句的类型

table:显示证一行数据是来源于哪张表的,不知道表名字的会用derivedx(x是数字)

type:访问类型,mysql在表中找到所需行的方式

type从上到下,性能从差到好

possible_keys :mysql使用哪个索引在表中找到记录,查询涉及到的字段若存在索引,则该索引将被列出,但不一定被查询使用。如果该列为NULL,则没有相关的索引。

key:显示mysql实际使用的索引

如果为NULL,则没有使用索引

key_len:索引中使用的字节数,长度越短越好

ref:表的连接匹配条件,即哪些列或常量被用于索引列上的值

rows:mysql根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

Extra:

本文参考:https://www.cnblogs.com/xuanzhi201111/p/4175635.html

上一篇 下一篇

猜你喜欢

热点阅读