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表示只需要使用索引就可以满足查询表的要求,说明表在使用覆盖索引。
欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/14994425.html