mysql explain 简介
所属分类 mysql
浏览量 1162
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优缺点