12个返回参数,分5、4、3理解记忆
5个 查询相关 |
| ||||||||||
4个 索引相关 |
| ||||||||||
3个 其他 |
|
11个select_type类型,7个常见
SIMPLE | 简单的SELECT(不使用UNION或子查询) |
PRIMARY | 最外层的SELECT |
UNION | UNION中的第二个或随后的SELECT查询,不依赖于外部查询的结果集 |
UNION RESULT | 一个UNION的结果 |
DEPENDENT UNION | UNION中的第二个或随后的SELECT查询,依赖于外部查询的结果集 |
SUBQUERY | 子查询中的第一个SELECT查询,不依赖于外部查询的结果集 |
DEPENDENT SUBQUERY | 第一个SELECT子查询,依赖于外部查询的结果集 |
DERIVED | 派生表用于FROM子句里有子查询的情况。MySQL会递归执行这些子查询,把结果放在临时表里 |
MATERIALIZED | 子查询的结果被保存为虚拟临时表,而不是为每一行执行它 |
UNCACHEABLE SUBQUERY | 结果集无法缓存的子查询,必须重新为外层查询的每一行进行评估 |
UNCACHEABLE UNION | UNION中的第二个或更后面的SELECT查询属于不可缓存的子查询 |
11种type类型,7个常见,优劣顺序自上而下
system | 表中只有一条数据,并使用 MyISAM | |
const | 通过主键或唯一索引的等值查询,并且只匹配一条数据。 | explain select * from table where id = 1 |
eq_ref | 多表连接查询,被驱动表使用主键或唯一索引等值查询 | explain select * from table1 t1 left join table2 t2 on t1.id = t2.id where t1.id = t2.id |
ref | 普通二级索引等值查询 | explain select * from table1 t1 left join table2 t2 on t1.name = t2.name where t1.name = t2.name |
range | 命中索引,并且区间查询 | explain select * from table where age > 1 |
index | 直接在索引树上匹配,并不需要回表 | explain select count(*) from table |
all | 全表扫描 | explain select * from table |