1 select_type
序号 | Column | 描述 |
---|---|---|
1 | SIMPLE | 简单查询(不使用UNION或子查询) |
2 | PRIMARY | 主查询、外查询 |
3 | UNION | UNION中第二个语句或后面的语句 |
4 | UNION RESULT | UNION每个结果集的取出来后,进行合并操作 |
5 | DEPENDENT SUBQUERY | 子查询中第一个SELECT |
6 | DEPENDENT UNION | 子查询中的UNION操作,从UNION 中第二个及之后的所有SELECT语句 |
7 | DERIVED | 派生表,子查询在 FROM子句中 |
2 查询需要用到的表
2.1 sys_user
用户表。
CREATE TABLE `sys_user` (
`user_id` int NOT NULL COMMENT '用户id',
`user_name` varchar(255) DEFAULT NULL COMMENT '用户名称',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
3 simple
SIMPLE,最简单的查询方式。
EXPLAIN SELECT * FROM `sys_user`
4 primary、union、union result
PRIMARY,主查询。
UNION,UNION中第二个语句或后面的语句。
UNION RESULT,UNION每个结果集的取出来后,进行合并操作。
EXPLAIN select * from sys_user where user_id=1
union
select * from sys_user where user_id=2
5 dependent subquery、dependent union
DEPENDENT SUBQUERY,子查询中内层的第一个SELECT,依赖于外部查询的结果集。
DEPENDENT UNION,子查询中的UNION操作,从UNION 第二个及之后的所有SELECT语句的SELECT TYPE为 DEPENDENT UNION。
explain select * from sys_user
where user_id in (
select user_id from sys_user where user_id=1
union
select user_id from sys_user where user_id=2
)
6 derived
DERIVED,派生表,子查询在 FROM子句中。
explain select * from
(
select user_id,count(*) from sys_user
group by user_id
) user1