explain的字段有哪些?
- Id:表示select子句或者操作表的顺序,执行顺序从大到小执行,当id一样时,执行顺序从上往下。
- Select_type:表示查询中每个select子句的类型,例如simple表示不包含子查询、表连接或其他复杂语法的简单查询,primary表示复杂查询的最外层查询,subquery表示在select或where列表中包含了子查询。
例如:
EXPLAIN select * from sc where sname ='李君'
explain SELECT *
FROM score AS a
WHERE degree < (SELECT AVG(degree) FROM score AS b WHERE a.cno = b.cno)
- Type:表示访问类型,性能由差到好为:All全表扫描;index索引全扫描;range索引范围扫描;ref返回匹配某个单独值所有行,常见于使用非唯一索引或唯一索引的非唯一前缀进行的查找,也经常出现在join操作中;eq_ref唯一性索引扫描,对于每个索引键只有一条记录与之匹配,const当MySQL对查询某部分进行优化,并转为一个常量时,使用这些访问类型,例如将主键或唯一索引置于where列表就能将该查询转为一个const。system表中只有一行数据或空表,只能用于myISAM和memory表,null执行时不用访问表或索引就能得到结果。SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果是consts最好。
- Possible_keys:表示查询时可能用到的索引,但不一定适用。列出大量可能索引时意味着备选索引数量太多了。
- Key:显示MySQL在查询时实际使用的索引,如果没有使用则显示为null。
- Key_len:表示使用到索引字段的长度,可通过该列计算查询中使用的索引的长度,对于确认索引有效性以及多列索引中用到的列数目很重要。
- Ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。
- Rows:表示MySQL根据表统计信息及索引选用情况,估算找到所需记录所需要读取的行数。
- Extra:表示额外信息,例如using temporary表示需要使用临时表存储结果集,常见于排序和分组查询。Using filesort表示无法利用索引完成的文件排序,这是order by的结果,可以通过合适的索引改进性能。Using index表示只需要使用索引就可以满足查询表的要求,说明表在使用覆盖索引。
欢迎批评指正,提出问题,谢谢!