分析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。
它們分別表示聯合查詢和聯合查詢的結果。