select_type
SIMPLE
最简单的SELECT查询,没有使用UNION或子查询。
PRIMARY
在嵌套的查询中是最外层的SELECT语句,在UNION查询中是最前面的SELECT语句。
UNION
UNION中第二个以及后面的SELECT语句。
DERIVED
派生表SELECT语句中FROM子句中的SELECT语句。
UNION RESULT
一个UNION查询的结果。
DEPENDENT UNION
顾名思义,首先需要满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询。
type
type是用来说明MySQL是如何访问表的,有没有使用索引,如何使用索引等信息。
type包含System,const,eq_ref,ref,range,index,all
const
当确定最多只会有一行匹配的时候,MySQL优化器会在查询前读取它而且只读取一次,因此非常快。const只会用在将常量和主键或唯一索引进行相等判断时,而且是比较所有的索引字段。联合索引的最左匹配原则不适用于此,主键上的范围查询不适用。system
这是const连接类型的一种特例,表仅有一行满足条件select * from table where id = 1;
eq_ref
eq_ref类型是除了const外最好的连接类型,它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY,此时,如果索引是PK,那么type就是const。
需要注意InnoDB和MyISAM引擎在这一点上有点差别。InnoDB当数据量比较小的情况优化器会放弃查询索引,这样可以减少一次回表操作,type会是All。
ref
这是一种索引查找,它返回匹配某个特定值的所有行,可能会找到多个符合条件的行,因此,它是索引查找和扫描的混合体,该索引访问的发生的条件是,只有当使用非唯一索引,或者唯一索引的非最左匹配,称之为ref的原因是要跟某个值参考比较。这个参考值或者是一个常数,或者是来自多表查询前一个表的结果值。
range
范围查询