首页  

mysql explain 简介     所属分类 mysql 浏览量 1169
Explain 执行计划

explain select * from xxx  
explain select * from xxx where id=3

system  const  eq_ref  ref  range  index all
sql查询达到range级别,最好能优化到ref


EXPLAIN 能提供的信息
表的读取顺序
数据读取操作的操作类型
哪些索引可以使用
哪些索引被实际使用
表之间的引用
每张表有多少行被优化器查询




explain select * from (select * from student where id=1) a;
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+
| id | select_type | table      | type   | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+
|  1 | PRIMARY     |  | system | NULL          | NULL    | NULL    | NULL  |    1 | NULL  |
|  2 | DERIVED     | student    | const  | PRIMARY       | PRIMARY | 4       | const |    1 | NULL  |
+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+

id 相同  由上到下执行
id的大先执行



select_type

SIMPLE              简单的select查询,不使用union及子查询
PRIMARY             最外层的select查询
UNION               UNION 中的第二个或随后的select查询,不依赖于外部查询的结果集
DEPENDENT UNION     UNION 中的第二个或随后的select查询,依赖于外部查询的结果集
SUBQUERY            子查询中的第一个select查询,不依赖于外部查询的结果集
DEPENDENT SUBQUERY  子查询中的第一个select查询,依赖于外部查询的结果集
DERIVED             用于 from 子句里有子查询的情况。 MySQL会递归执行子查询, 把结果放在临时表里
UNCACHEABLE SUBQUERY     结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估
UNCACHEABLE UNION        UNION 中的第二个或随后的selec查询,属于不可缓存的子查询 

type

system     系统表,表仅有一行,const类型的一个特例
const      常数值比较 PRIMARY KEY  
eq_ref     唯一性索引扫描 最多一条匹配结果,通常是通过主键访问 ,
ref 
fulltext 
ref_or_null 
index_merge 
unique_subquery
index_subquery 
range      索引范围扫描
index      全索引扫描
all        全表扫描 

possible_keys
key  实际使用的建
key_len  
ref 
rows
Extra
   Using index condition  
   Using filesort
   Using temporary
   Using index  使用覆盖索引
   Using where  使用where条件,未经过索引查询
   Select tables optimized away 用某些聚合函数来访问索引字段
   Using join buffer
   impossible where   where子句的值总是false 


覆盖索引(Covering Index)
无法利用索引完成的排序操作称为 文件排序 
对查询结果排序时使用临时表,常用于 order by和group by



EXPLAIN不提供关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
EXPLAIN不考虑各种Cache
EXPLAIN不显示在执行查询时所作的优化工作
部分统计信息是估算的,并非精确值
EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

上一篇     下一篇
arthas 异常排查技巧

elasticsearch 优化点

Java异常知识点

mysql中的浮点数

MongoDB面试题

MongoDB优缺点