explain的列分析
id:代表select语句的编号
select编号都是从1开始,如果某select中有子查询则编号递增。select_type:查询类型。
分成simple(不含子查询)和primary(含子查询或派生查询)。primary下含有subquery(非from子查询)、derived(from型子查询)、union、union result。table:查询针对的表
实际的表名 如select * from t1
表的别名 如select * from t2 as tmp
derived 如from型子查询 select * from (select * from student_info) a
null 直接计算得到结果,不用走表 如select 1 from dualtype:查询的方式。
- all:全表扫描。从第一行开始扫描,运气不好扫描到最后一行。
- index:index扫描所有的索引节点
情况一,能利用上索引,但是又必须全索引扫描
情况二,利用索引来进行排序,但取出所有的节点 - range:查询时,能根据索引做范围的扫描
- ref:通过索引列,可以直接引用到某些数据行
- eq_ref:通过索引列,直接引用某一行数据
- const、system:一般按照主键来查询时,易出现const,system
- null:直接查询某个表达式,不经过表时, 出现NULL
possible_keys:可能用到的索引
注意:系统估计可能用的几个索引,但最终只能使用1个。key:最终用的索引。
key_len:使用的索引最大的长度。 长度越小越好
ref:连接查询时,前表与后表的引用关系
rows:估计要扫描多少行
extra:
- index:用到了索引覆盖,效率非常高
- using where:光靠索引定位不了,还得where判断一下
- using temporary:用上了临时表
- using filesort:文件排序