1.id介绍
这个id不是主键的意思,他是用来标识select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序。
会出现以下情况:
id相同:按从上到下顺序执行
id不同:id值越大,优先级越高,越先被执行
id相同不同的同时存在:优先执行id值大的,如果id值相同,则按从上到下的顺序执行
id为null表示是用来合并结果集的,在sql使用union关键字合并结果集就会出现他。
2.select_type介绍
顾名思义,表示查询的类型
类型 | 说明 |
---|---|
simple | 简单子查询,不包含子查询和union |
primary | 包含union或者子查询,最外层的部分标记为primary |
subquery | 一般子查询中的子查询被标记为subquery,也就是位于select列表中的查询 |
derived | 派生表——该临时表是从子查询派生出来的,位于form中的子查询 |
union | 位于union中第二个及其以后的子查询被标记为union,第一个就被标记为primary如果是union位于from中则标记为derived |
union result | 用来从匿名临时表里检索结果的select被标记为union result |
dependent union | 顾名思义,首先需要满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询 |
subquery | 子查询中第一个SELECT语句 |
dependent subquery | 和DEPENDENT UNION相对UNION一样 |
3.table介绍
对应行正在访问哪一个表,表名或者别名。也有可能是临时表等等,或者是union合并结果集。
- 表名是derivedN的形式,表示使用了id为N的查询产生的衍生表
- 当有union result的时候,表名是union n1,n2等的形式,n1,n2表示参与union的id
注意:MySQL对待这些表和普通表一样,但是这些“临时表”是没有任何索引的。
4.举例说明
说明:可以看到,先查询b2表再查询b1表,而且都是简单查询。
说明:b2表对应的id为2,所以先查询b2表,查询类型是依赖子查询,然后在查询b1表,查询类型是主查询。
说明:先查询b2表,在查询b3表,然后查询b1表,最后合并结果集。<union1,2>指的是将id为1和id为2查询的结果合并。
说明:先查询b1表得出一个临时表,然后在查询这个临时表,这个derived2表示使用了id为2的查询出来的结果集作为临时表,最后才是b2表。
参考资料: