MySQL不支援子查詢最佳化一例

來源:互聯網
上載者:User

標籤:primary   insert   create   mysql   values   

一建立表

create table tt1(id int primary key, c1 INT);
create table tt2(id int primary key, c2 INT);
insert into tt1 values(1,1),(2,2),(3,3),(4,4);
insert into tt2 values(1,2),(2,2);

 

二 執行計畫與問題

mysql> explain EXTENDED SELECT tt1.c1, (SELECT tt2.c2 FROM tt2 WHERE c2=10) FROM tt1, tt2;
+----+-------------+-------+-------+---------------+---------+---------+------+------+----------+---------------------------------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra                                 |
+----+-------------+-------+-------+---------------+---------+---------+------+------+----------+---------------------------------------+
|  1 | PRIMARY     | tt2   | index | NULL          | PRIMARY | 4       | NULL |    2 |   100.00 | Using index                           |
|  1 | PRIMARY     | tt1   | ALL   | NULL          | NULL    | NULL    | NULL |    4 |   100.00 | Using join buffer (Block Nested Loop) |
|  2 | SUBQUERY    | tt2   | ALL   | NULL          | NULL    | NULL    | NULL |    2 |   100.00 | Using where                           |
+----+-------------+-------+-------+---------------+---------+---------+------+------+----------+---------------------------------------+
3 rows in set, 1 warning (0.00 sec)
這個語句的執行順序是怎麼執行的,就是按照執行計畫這樣從上到下執行嗎?

三 分析

---id值為1的兩個,是From子句中的tt1和tt2,用塊嵌套迴圈串連演算法做內串連,tt2是外表,所以先啟動的是tt2;後啟動的是tt1。
---id值為2的是目標列中的子查詢,後於FROM子句中的表執行。發生在串連後要求目標列的值發給用戶端階段。
---理論上是可以最佳化的,方法為:目標列只有一列和WHERE條件相同,所以,可以推知此子查詢的結果是2。
---但是,MySQL沒有最佳化這樣的子查詢。
---另外,對於這裡的子查詢,如果其結果返回多行,則MySQL會報告錯誤:ERROR 1242 (21000): Subquery returns more than 1 row。


本文出自 “Linux營運” 部落格,請務必保留此出處http://2853725.blog.51cto.com/2843725/1546306

MySQL不支援子查詢最佳化一例

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.