详细解释MySQL explain 中的 select_type 是什么
simple
查询语句中不包含UNION
或者子查询的查询都算作是SIMPLE
类型,无论是单表查询还是联合查询这些查询的级别都是 simple。顾名思义,这些查询都被 MySQL 认为是比较简单的查询模式。
单表查询:
连接查询:
使用子查询:
这里需要说明的一点是,其实子查询严格意义上不是 simple 级别的,但是我这里举得这个例子比较特殊,原理是因为这个 SQL 在MySQL 的查询优化器上被优化成了连接查询,所以才会出现这种情况。换句话说,这个 SQL 最终执行的内容和上面的这个 SQL 是一种类型。
primary
对于包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的select_type值就是PRIMARY
比如说:
union
接着上面的说,包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的嘛。除了第一个是 PRIMARY,其他的都是 UNION
UNION RESULT
还是接着上面说,如果 MySQL 中的 UNION 需要用到临时表进行去重的话,那么这个小查询的级别就是 UNION RESULT
SUBQUERY
如果我们的子查询不能转换对应 semi-join的形式,而且这个查询不是相关子查询的话,并且查询优化器决定采用将该子查询物化的方案来执行该子查询时,这个时候该子查询的第一个 SELECT 的级别就是 SUBQUERY
DEPENDENT SUBQUERY
如果包含子查询的查询语句不能够转为对应的semi-join的形式,并且该子查询是相关子查询,则该子查询的第一个SELECT关键字代表的那个查询的select_type就是DEPENDENT SUBQUERY
DEPENDENT UNION
在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的select_type的值就是DEPENDENT UNION
该随笔为学习笔记,内容源自《MySQL 是怎样运行的:从根儿上理解 MySQL》