分析sql的时候,我们会用explain。
explain的字段:
第一个字段是id。id越大越先执行,id相同从上至下执行。
我们主要讲讲select_type。
我们加上一张location表,并且在tbl_dept中添加location_id字段:
首先是简单查询:
直接select * from
的select_type就是SIMPLE
。
然后是子查询和主要查询:
tbl_emp和location都是SUBQUERY
。
而tbl_dept却是PRIMARY
。它的意思是它是主要查询,就是最外层的查询,最后一个轮到它。
看这条sql:
出现了衍生表,或者说是虚表:from (select .....)
mysql认为这样的查询类型就是DERIVED
。
+----+-------------+------------+------------+--------+---------------+------+---------+------+------+----------+----------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------+------------+--------+---------------+------+---------+------+------+----------+----------------+
| 1 | PRIMARY | <derived2> | NULL | system | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
| 1 | PRIMARY | t1 | NULL | ALL | NULL | NULL | NULL | NULL | 7 | 100.00 | NULL |
| 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
+----+-------------+------------+------------+--------+---------------+------+---------+------+------+----------+----------------+
<derived2>
表示是从id为2的表衍生的。
当我们使用union的时候:
还会出现UNION
和UNION RESULT
两个select_type。
它们分别表示联合查询和联合查询的结果。