MySQL執(zhí)行計劃中的各個參數(shù)及含義指的是什么

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)MySQL執(zhí)行計劃中的各個參數(shù)及含義指的是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)是一家專業(yè)提供衛(wèi)東企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都做網(wǎng)站、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為衛(wèi)東眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

查看執(zhí)行計劃

可以使用explain + SQL或者desc + SQL

1、使用explain查看執(zhí)行計劃

mysql> explain select * from employee;
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | employee | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | NULL  |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set, 1 warning (0.01 sec)

2、使用desc查看執(zhí)行計劃

mysql> desc select * from employee;
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | employee | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | NULL  |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

一、ID

select查詢的序列號;包含一組數(shù)字,表示查詢中執(zhí)行select子句或操作表的順序。

id的值分為三種情況:

id完全相同;

id完全不同;

id部分相同部分不相同。

1、id完全相同

對三個表進行關(guān)聯(lián)

EXPLAIN
SELECT *
FROM   EMPLOYEE   E
      ,DEPARTMENT D
      ,CUSTOMER   C
WHERE  E.DEP_ID = D.ID
       AND E.CUS_ID = C.ID;
+----+-------------+-------+------------+--------+---------------+---------+---------+---------------+------+----------+----------------------------------------------------+
| id | select_type | table | partitions | type   | possible_keys | key     | key_len | ref           | rows | filtered | Extra                                              |
+----+-------------+-------+------------+--------+---------------+---------+---------+---------------+------+----------+----------------------------------------------------+
|  **1** | SIMPLE      | C     | NULL       | ALL    | PRIMARY       | NULL    | NULL    | NULL          |    1 |   100.00 | NULL                                               |
|  1 | SIMPLE      | E     | NULL       | ALL    | NULL          | NULL    | NULL    | NULL          |    8 |    12.50 | Using where; Using join buffer (Block Nested Loop) |
|  1 | SIMPLE      | D     | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | demo.E.dep_id |    1 |   100.00 | NULL                                               |
+----+-------------+-------+------------+--------+---------------+---------+---------+---------------+------+----------+----------------------------------------------------+
3 rows in set, 1 warning (0.01 sec)

可以看到id這一列的數(shù)據(jù)都是相同的,都是1,執(zhí)行順序由上到下(先掃描c,在掃描e,最后掃描d)。

2、id完全不同

使用嵌套子查詢

EXPLAIN 
SELECT *
FROM   DEPARTMENT
WHERE  ID = (SELECT ID
             FROM   EMPLOYEE
             WHERE  ID = (SELECT ID FROM CUSTOMER WHERE ID = 1));
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
| id | select_type | table      | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra       |
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
|  1 | PRIMARY     | DEPARTMENT | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL        |
|  2 | SUBQUERY    | EMPLOYEE   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | Using index |
|  3 | SUBQUERY    | CUSTOMER   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | Using index |
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
3 rows in set, 1 warning (0.01 sec)

id為1、2、3,如果是子查詢,id的序號會遞增,id值越大優(yōu)先級越高,優(yōu)先被執(zhí)行。

3、id部分相同部分不相同

使用子查詢作為表

EXPLAIN 
SELECT *
FROM   DEPARTMENT D
      ,(SELECT DEP_ID FROM EMPLOYEE GROUP BY DEP_ID) E
WHERE  D.ID = E.DEP_ID;
+----+-------------+------------+------------+------+---------------+-------------+---------+-----------+------+----------+-----------------+
| id | select_type | table      | partitions | type | possible_keys | key         | key_len | ref       | rows | filtered | Extra           |
+----+-------------+------------+------------+------+---------------+-------------+---------+-----------+------+----------+-----------------+
|  1 | PRIMARY     | D          | NULL       | ALL  | PRIMARY       | NULL        | NULL    | NULL      |    5 |   100.00 | NULL            |
|  1 | PRIMARY     | <derived2> | NULL       | ref  | <auto_key0>   | <auto_key0> | 5       | demo.D.id |    2 |   100.00 | Using index     |
|  2 | DERIVED     | EMPLOYEE   | NULL       | ALL  | NULL          | NULL        | NULL    | NULL      |    8 |   100.00 | Using temporary |
+----+-------------+------------+------------+------+---------------+-------------+---------+-----------+------+----------+-----------------+
3 rows in set, 1 warning (0.00 sec)

id部分相同,部分不相同??梢哉J為是一組,(id=1為一組,id=2為另一組)從上往下順序執(zhí)行;在所有組中,id值越大,優(yōu)先級越高,越先執(zhí)行;先執(zhí)行完2組,然后執(zhí)行1組,1組內(nèi),相同的依然是從上到下的執(zhí)行順序。

最終的執(zhí)行順序:

①id = 2先執(zhí)行

②id = 1的組內(nèi)的第一行先執(zhí)行(d)

③id = 1的組內(nèi)的第二行最后執(zhí)行(<derived2>)

對于ID字段來說,相同的值則遵循從上往下的執(zhí)行順序;不同值時遵循大的先執(zhí)行。

 二、select_type

查詢類型,主要用于區(qū)別普通查詢,聯(lián)合查詢,子查詢等復雜查詢

SIMPLE、 PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT(DEPENDENT SUBQUERY、DEPENDENT UNION)

1、SIMPLE簡單查詢

簡單select查詢,查詢中不包含子查詢或者UNION。

對employee進行查詢

EXPLAIN 
SELECT * FROM EMPLOYEE;
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | EMPLOYEE | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | NULL  |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

類型為simple,只對一個單表進行查詢。

2、PRIMARY外層查詢

查詢中若包含任何復雜的子查詢,最外層查詢則被標記為primary。

EXPLAIN 
SELECT *
FROM   DEPARTMENT
WHERE  ID = (SELECT ID
             FROM   EMPLOYEE
             WHERE  ID = (SELECT ID FROM CUSTOMER WHERE ID = 1));
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
| id | select_type | table      | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra       |
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
|  1 | PRIMARY     | DEPARTMENT | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL        |
|  2 | SUBQUERY    | EMPLOYEE   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | Using index |
|  3 | SUBQUERY    | CUSTOMER   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | Using index |
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
3 rows in set, 1 warning (0.00 sec)

Id=1的select_type為primary,對表department進行掃描,并且該查詢是最外層查詢,所以被標記為primary。

 3、SUBQUERY子查詢

3.1、SUBQUERY不依賴于外部查詢

在select或where中包含了子查詢,子查詢中的第一個select查詢,不依賴于外部查詢結(jié)果。

EXPLAIN 
SELECT *
FROM   DEPARTMENT
WHERE  ID = (SELECT ID
             FROM   EMPLOYEE
             WHERE  ID = (SELECT ID FROM CUSTOMER WHERE ID = 1));
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
| id | select_type | table      | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra       |
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
|  1 | PRIMARY     | DEPARTMENT | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL        |
|  2 | SUBQUERY    | EMPLOYEE   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | Using index |
|  3 | SUBQUERY    | CUSTOMER   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | Using index |
+----+-------------+------------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
3 rows in set, 1 warning (0.00 sec)

Id = 2 和id = 3的類型為subquery,是一個子查詢,被標記為subquery,并且由于該子查詢不依賴與外部的查詢結(jié)果,所以只顯示subquery。

3.2、SUBQUERY依賴于外部查詢

子查詢的內(nèi)容依賴與外部查詢的內(nèi)容,最明顯的標量子查詢。

EXPLAIN 
SELECT ID
      ,(SELECT DEP_ID FROM EMPLOYEE E WHERE E.ID = D.ID) DEP_ID
FROM   DEPARTMENT D;
+----+--------------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+
| id | select_type        | table | partitions | type   | possible_keys | key     | key_len | ref       | rows | filtered | Extra       |
+----+--------------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+
|  1 | PRIMARY            | D     | NULL       | index  | NULL          | PRIMARY | 4       | NULL      |    5 |   100.00 | Using index |
|  2 | DEPENDENT SUBQUERY | E     | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | demo.D.id |    1 |   100.00 | NULL        |
+----+--------------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+
2 rows in set, 2 warnings (0.00 sec)

select中的子查詢依賴與外部查詢d表的結(jié)果,所以id = 2是子查詢,并且是依賴于外部查詢的子查詢,被標記為DEPENDENT SUBQUERY。

 4、DERIVED衍生表(臨時表)

在from列表中包含的子查詢被標記為derived(衍生),把結(jié)果放在臨時表當中。

EXPLAIN 
SELECT *
FROM   DEPARTMENT D
      ,(SELECT DEP_ID FROM EMPLOYEE GROUP BY DEP_ID) E
WHERE  D.ID = E.DEP_ID;
+----+-------------+------------+------------+------+---------------+-------------+---------+-----------+------+----------+-----------------+
| id | select_type | table      | partitions | type | possible_keys | key         | key_len | ref       | rows | filtered | Extra           |
+----+-------------+------------+------------+------+---------------+-------------+---------+-----------+------+----------+-----------------+
|  1 | PRIMARY     | D          | NULL       | ALL  | PRIMARY       | NULL        | NULL    | NULL      |    5 |   100.00 | NULL            |
|  1 | PRIMARY     | <derived2> | NULL       | ref  | <auto_key0>   | <auto_key0> | 5       | demo.D.id |    2 |   100.00 | Using index     |
|  2 | DERIVED     | EMPLOYEE   | NULL       | ALL  | NULL          | NULL        | NULL    | NULL      |    8 |   100.00 | Using temporary |
+----+-------------+------------+------------+------+---------------+-------------+---------+-----------+------+----------+-----------------+
3 rows in set, 1 warning (0.00 sec)

從id=2可以看到,先執(zhí)行2,從table可以發(fā)現(xiàn),被掃描的表是employee,是子查詢的表,該子查詢的結(jié)果被放在一個臨時表里,被標記為DERIVED。

 5、UNION

 5.1、UNION不依賴于外部查詢

若第二個select出現(xiàn)在union之后,則被標記為union,并且是不依賴于外部查詢。

EXPLAIN 
SELECT ID FROM EMPLOYEE UNION SELECT ID FROM DEPARTMENT;
+----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+
| id | select_type  | table      | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra           |
+----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+
|  1 | PRIMARY      | EMPLOYEE   | NULL       | index | NULL          | PRIMARY | 4       | NULL |    8 |   100.00 | Using index     |
|  2 | UNION        | DEPARTMENT | NULL       | index | NULL          | PRIMARY | 4       | NULL |    5 |   100.00 | Using index     |
| NULL | UNION RESULT | <union1,2> | NULL       | ALL   | NULL          | NULL    | NULL    | NULL | NULL |     NULL | Using temporary |
+----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+
3 rows in set, 1 warning (0.00 sec)

該查詢是由兩個單獨的select進行的union,不存在子查詢,所以直接把id=2的類型標記為UNION,并且第一個的select會被默認的標記為primary,之后用來union的select都會在該select之前執(zhí)行。

5.2、UNION依賴于外部查詢

若第二個select出現(xiàn)在union之后,則被標記為union,并且是依賴于外部查詢。

EXPLAIN 
SELECT ID
      ,NAME
FROM   CUSTOMER
WHERE  ID IN (SELECT ID FROM EMPLOYEE UNION SELECT ID FROM DEPARTMENT);
+----+--------------------+------------+------------+--------+---------------+---------+---------+------+------+----------+-----------------+
| id | select_type        | table      | partitions | type   | possible_keys | key     | key_len | ref  | rows | filtered | Extra           |
+----+--------------------+------------+------------+--------+---------------+---------+---------+------+------+----------+-----------------+
|  1 | PRIMARY            | CUSTOMER   | NULL       | ALL    | NULL          | NULL    | NULL    | NULL |    1 |   100.00 | Using where     |
|  2 | DEPENDENT SUBQUERY | EMPLOYEE   | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | func |    1 |   100.00 | Using index     |
|  3 | DEPENDENT UNION    | DEPARTMENT | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | func |    1 |   100.00 | Using index     |
| NULL | UNION RESULT       | <union2,3> | NULL       | ALL    | NULL          | NULL    | NULL    | NULL | NULL |     NULL | Using temporary |
+----+--------------------+------------+------------+--------+---------------+---------+---------+------+------+----------+-----------------+
4 rows in set, 1 warning (0.01 sec)

還是和上面一樣,emp表和dep表進行了union操作,不過現(xiàn)在放在了子查詢里,現(xiàn)在的結(jié)果集和外面的查詢的結(jié)果集有了聯(lián)系。先執(zhí)行的id=3為department表,并且該查詢在union后面, 由于與外部查詢有聯(lián)系,所以被標記為DEPENDENT UNION;第二步執(zhí)行的是id= 2的表employee,該部分是一個子查詢部分,并且和外部查詢有聯(lián)系,所以是一個依賴子查詢,標記為DEPENDENT SUBQUERY;最后執(zhí)行的是id=1部分,最外層的查詢,被標記為primary。

5.3、UNION在from子句

若union包含在from子句的子查詢中,外層select將被標記為deriver(deriver表必須有別名),如果沒有別名將會報錯。

不寫別名,會報錯:

EXPLAIN
SELECT *
FROM   (SELECT ID
              ,NAME
        FROM   EMPLOYEE
        UNION
        SELECT ID
              ,DEPTNAME
        FROM   DEPARTMENT);
ERROR 1248 (42000): Every derived table must have its own alias

正確寫法,寫上別名:

EXPLAIN 
SELECT *
FROM   (SELECT ID
              ,NAME
        FROM   EMPLOYEE
        UNION
        SELECT ID
              ,DEPTNAME
        FROM   DEPARTMENT) T;
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
| id | select_type  | table      | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
|  1 | PRIMARY      | <derived2> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   13 |   100.00 | NULL            |
|  2 | DERIVED      | EMPLOYEE   | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | NULL            |
|  3 | UNION        | DEPARTMENT | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    5 |   100.00 | NULL            |
| NULL | UNION RESULT | <union2,3> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | NULL |     NULL | Using temporary |
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
4 rows in set, 1 warning (0.00 sec)

和上面略有不同,現(xiàn)在是把union的子查詢直接放在了from里面當作一個表,而不是根據(jù)一個表的字段去in或者exists連接,此時執(zhí)行計劃將會有所不同。

第一點:select * from (select * from b)的寫法,必須給括號里的內(nèi)容起一個別名,如果沒有別名,將會報錯“1248 - Every derived table must have its own alias”。

第二點:在使用這種寫法時,會把括號里的查詢生成一個衍生表(臨時表),標記為DERIVED,進一步分析子查詢,首先執(zhí)行的是id=3的department表,因為在union 后面,所以對應(yīng)該表的操作的select_type被標記為union;其次執(zhí)行的是id=2的employee表,此處被標記為DERIVED;最后執(zhí)行id=3,并且最外層是select * from (),被標記為primary,外部查詢,而且由于是查詢括號里的衍生表的記錄,所以掃描的表是該衍生表deriverd2。

 6、UNION RESULT

從union表獲取結(jié)果select;兩個UNION合并的結(jié)果集在最后。

若第二個select出現(xiàn)在union之后,則被標記為union,并且是不依賴于外部查詢。

EXPLAIN 
SELECT ID FROM EMPLOYEE UNION SELECT ID FROM DEPARTMENT;
+----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+
| id | select_type  | table      | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra           |
+----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+
|  1 | PRIMARY      | EMPLOYEE   | NULL       | index | NULL          | PRIMARY | 4       | NULL |    8 |   100.00 | Using index     |
|  2 | UNION        | DEPARTMENT | NULL       | index | NULL          | PRIMARY | 4       | NULL |    5 |   100.00 | Using index     |
| NULL | UNION RESULT | <union1,2> | NULL       | ALL   | NULL          | NULL    | NULL    | NULL | NULL |     NULL | Using temporary |
+----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+
3 rows in set, 1 warning (0.00 sec)

該查詢是由兩個單獨的select進行的union,不存在子查詢,先執(zhí)行的id=2,對department進行掃描,在對employee表進行掃描,然后把這兩個單獨查詢結(jié)果集進行合并,使用UNION RESULT表示union操作的合并的步驟,并且union是需要對兩部分的數(shù)據(jù)進行排序然后在進行合并,所以只有當存在排序之后的合并才會有UNION RESULT。

 7、UNION ALL 

7.1、UNION ALL不依賴于外部查詢

若第二個select出現(xiàn)在union之后,則被標記為union,并且是不依賴于外部查詢。

EXPLAIN 
SELECT ID FROM EMPLOYEE UNION ALL SELECT ID FROM DEPARTMENT;
+----+-------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table      | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra       |
+----+-------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
|  1 | PRIMARY     | EMPLOYEE   | NULL       | index | NULL          | PRIMARY | 4       | NULL |    8 |   100.00 | Using index |
|  2 | UNION       | DEPARTMENT | NULL       | index | NULL          | PRIMARY | 4       | NULL |    5 |   100.00 | Using index |
+----+-------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
2 rows in set, 1 warning (0.00 sec)

該查詢是由兩個單獨的select進行的union,不存在子查詢,所以直接把id=2的類型標記為UNION,并且第一個的select會被默認的標記為primary,之后用來union的select都會在該select之前執(zhí)行。Id部分和select_type部分與union時候一致,唯獨少了最后的UNION RESULT,該部分是因為要對兩部分的數(shù)據(jù)排序在合并才會產(chǎn)生,而union all不需要排序,只需要把兩部分內(nèi)容合并就可以,所以不會有UNION RESULT。

7.2、UNION ALL依賴于外部查詢

若第二個select出現(xiàn)在union之后,則被標記為union,并且是依賴于外部查詢。

EXPLAIN 
SELECT ID
      ,NAME
FROM   CUSTOMER
WHERE  ID IN (SELECT ID FROM EMPLOYEE UNION ALL SELECT ID FROM DEPARTMENT);
+----+--------------------+------------+------------+--------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type        | table      | partitions | type   | possible_keys | key     | key_len | ref  | rows | filtered | Extra       |
+----+--------------------+------------+------------+--------+---------------+---------+---------+------+------+----------+-------------+
|  1 | PRIMARY            | CUSTOMER   | NULL       | ALL    | NULL          | NULL    | NULL    | NULL |    1 |   100.00 | Using where |
|  2 | DEPENDENT SUBQUERY | EMPLOYEE   | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | func |    1 |   100.00 | Using index |
|  3 | DEPENDENT UNION    | DEPARTMENT | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | func |    1 |   100.00 | Using index |
+----+--------------------+------------+------------+--------+---------------+---------+---------+------+------+----------+-------------+
3 rows in set, 1 warning (0.00 sec)

還是和UNION一樣, 只不過少了UNION RESULT部分。

 7.3、UNION ALL在from子句

若union all包含在from子句的子查詢中,外層select將被標記為deriver(deriver表必須有別名),如果沒有別名將會報錯。

不寫別名,會報錯:

EXPLAIN 
SELECT *
FROM   (SELECT ID
              ,NAME
        FROM   EMPLOYEE
        UNION
        SELECT ID
              ,DEPTNAME
        FROM   DEPARTMENT);
ERROR 1248 (42000): Every derived table must have its own alias

正確寫法:

EXPLAIN 
SELECT *
FROM   (SELECT ID
              ,NAME
        FROM   EMPLOYEE
        UNION
        SELECT ID
              ,DEPTNAME
        FROM   DEPARTMENT) T;
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
| id | select_type  | table      | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
|  1 | PRIMARY      | <derived2> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   13 |   100.00 | NULL            |
|  2 | DERIVED      | EMPLOYEE   | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | NULL            |
|  3 | UNION        | DEPARTMENT | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    5 |   100.00 | NULL            |
| NULL | UNION RESULT | <union2,3> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | NULL |     NULL | Using temporary |
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
4 rows in set, 1 warning (0.00 sec)

和union一樣,不過少了UNION RESULT部分。

上述就是小編為大家分享的MySQL執(zhí)行計劃中的各個參數(shù)及含義指的是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文題目:MySQL執(zhí)行計劃中的各個參數(shù)及含義指的是什么
網(wǎng)頁路徑:http://www.muchs.cn/article44/pgdpee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷電子商務(wù)、網(wǎng)站導航、微信公眾號、App設(shè)計、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站