数据库的查询语句前加explain,可以查看语句的查询计划,例如
explain select * from studen;
执行会出现
id是查询语句中涉及到的表的优先度,id值越大的表越优先查询,值相同的从上向下执行,对应后面的table
select_type是查询类型,包括:
PRIMARY:包含子查询的sql语句的主查询(最外层最终要获取的结果)
SUBQUERY:包含子查询的sql语句的子查询(查询嵌套的内层)
SIMPLE:最简单的查询(不包含子查询等复杂查询方式以及union等)
DERIVED:衍(此字读yan)生查询(使用了临时表)
(1)在from子查询中只有一个表
例如:学生表有name,sex和age字段,四条数据(张三,男,18)(李四,女,19),(王五,男,20),(张三 ,女,21)我们来查 一下年龄为18或19,名字叫张三的性别
explain select sst.sex from (select * from student where student.age in (18,19)) sst where sst.name='张三'
sst为子查询结果构成的临时表
(2)在from子查询中有union关键字时第一个表为衍生表
explain select sst.sex from (select * from student where student.age=18 union select * from student where student.age=19)) sst where sst.name='张三'
这是括号里的两个student虽然是同一个表,但第一个类型为 DERIVED衍生表,第二个类型为union表