详细解释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》

posted @ 2021-03-12 09:31  joimages  阅读(1455)  评论(0编辑  收藏  举报