Mysql Database 执行计划: explain

id
显示select语句的执行顺序
(1) id相同时,执行顺序由上至下
(2) 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
(3) id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

select_type
显示select语句的查询类型
simple:select语句中不包含union与子查询
primary:select语句中若包含子查询,最外层的select语句
subquery:select语句中包含的子查询
derived:select语句的from子句中包含的子查询
union:通过union来连接多个select语句时,在union后面的select语句

table 
显示select语句查询的表或衍生表

type
显示mysql决定如何访问表(访问类型)
ALL:全表扫描
index:全索引扫描
range:索引范围扫描
ref:非唯一索引扫描,对于每个索引键,表中可能有多条记录与之匹配
eq_ref:主键或唯一索引扫描,对于每个索引键,表中只有一条记录与之匹配

possible_keys列
显示mysql可能使用哪些索引来访问表
 
key列
显示mysql实际使用哪个索引来访问表

key_len列
显示索引中使用的字节数,通过这个值可以判断使用了索引中的哪些列
 
ref
显示表的连接匹配条件

rows
显示mysql估算的在查询过程中表需要被扫描多少行

Extra
Using index:仅访问索引就可以获得结果集,无需访问表
Using where:存储引擎返回的数据需要进行过滤
Using temporary:在查询过程中需要创建临时表
Using filesort:在查询过程中使用了文件排序,因为排序列未创建索引
Using join buffer:在多表join查询时,内表的连接列未创建索引,需要在join buffer中缓存查询中外表相关的所有列(block nest loop join)


猜你喜欢

转载自blog.51cto.com/13598811/2304935