听课问题(听完课自己查资料)
- type中常用类型详细解释 null <- system <- const <- er_ref <- ref <- range <- index <- all
Explain 各列解释
EXPLAIN SELECT
*
FROM
actor
LEFT JOIN film_actor ON actor_id = actor.id;
1. id
代表执行的先后顺序 比如现在依次有 3、2、1、2 那么执行顺序就是 3、2(第一次出现的2) 、2(第二次出现的2)、1
总结:越大执行越靠前,如果id形同那么最先出现的最先执行
2. select_type
分为四种类型 simple、subquery、derived、primary
a. simple
简单查询比如就一个简单的单条语句查询 EXPLAIN SELECT * FROM actor;
例如这样单表查询 没有进行关联查询也没有关联其他表有临时表查询
b. subquery
在select后面的称为 subquery类型 比如这个查询
EXPLAIN SELECT (SELECT id FROM film_actor) as id FROM actor;
其中select后面括号中的就是一个subquery类型
c. derived
是跟在from后面组成的临时表,如下SQL
EXPLAIN SELECT te.* FROM (SELECT * FROM actor) as te;
其中from后面又跟了一个子查询并且这个子查询自己构建了一个临时表 所以这个子查询就是derived类型
d. primary
最外层的查询语句
3. table
就是当前这一列正在查询的表名称
但是如下图
explain select (select 1 from actor where id = 1) from (select * from film where id = 1) der;
因为有构建一个临时表,所以上边id=1的一列是一个临时表并没有真正的名称,但是id=3那一条正是构建这个临时表的子查询sql 所以显示 <derived3>后面的3就是指向的id 这个示例表示临时表是id=3的子查询sql生成的。
4. type
分为好多种,常见的有(最优在前): null - system - const - eq_ref - ref - range - index - all
a. null
速度是最快的,相当于没有经过这张表查询或者索引
explain select min(id) from film;
上边这个根据主键id 查询最小的主键id,在主键索引中都是排序的,所以第一个id肯定就是整张表中最小的,所以查询的时候什么都不用管无脑拿表中第一个id就行了,那么肯定是最快的,因为后面有什么数据根本