mysql不支持子查询_MySQL不支持子查询优化一例
一創(chuàng)建表 create table tt1(id int primary key, c1 INT);create table tt2(id int primary key, c2 INT);insert into tt1 value
一創(chuàng)建表
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);
二 執(zhí)行計(jì)劃與問(wèn)題
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)
這個(gè)語(yǔ)句的執(zhí)行順序是怎么執(zhí)行的,就是按照?qǐng)?zhí)行計(jì)劃這樣從上到下執(zhí)行嗎?
三 分析
---id值為1的兩個(gè),,是From子句中的tt1和tt2,用塊嵌套循環(huán)連接算法做內(nèi)連接,tt2是外表,所以先啟動(dòng)的是tt2;后啟動(dòng)的是tt1。
---id值為2的是目標(biāo)列中的子查詢,后于FROM子句中的表執(zhí)行。發(fā)生在連接后要求目標(biāo)列的值發(fā)給客戶端階段。
---理論上是可以優(yōu)化的,方法為:目標(biāo)列只有一列和WHERE條件相同,所以,可以推知此子查詢的結(jié)果是2。
---但是,MySQL沒(méi)有優(yōu)化這樣的子查詢。
---另外,對(duì)于這里的子查詢,如果其結(jié)果返回多行,則MySQL會(huì)報(bào)告錯(cuò)誤:ERROR 1242 (21000): Subquery returns more than 1 row。
--------------------------------------分割線 --------------------------------------
Ubuntu 14.04下安裝MySQL
《MySQL權(quán)威指南(原書第2版)》清晰中文掃描版 PDF
Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL
Ubuntu 14.04下搭建MySQL主從服務(wù)器
Ubuntu 12.04 LTS 構(gòu)建高可用分布式 MySQL 集群
Ubuntu 12.04下源代碼安裝MySQL5.6以及Python-MySQLdb
MySQL-5.5.38通用二進(jìn)制安裝
--------------------------------------分割線 --------------------------------------
本文永久更新鏈接地址:
本條技術(shù)文章來(lái)源于互聯(lián)網(wǎng),如果無(wú)意侵犯您的權(quán)益請(qǐng)點(diǎn)擊此處反饋版權(quán)投訴
本文系統(tǒng)來(lái)源:php中文網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的mysql不支持子查询_MySQL不支持子查询优化一例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑显示器开hdr好不好(显示器开hdr
- 下一篇: Mysql索引使用情况_介绍mysql索