mysql 非相關子查詢 相關子查詢一

2021-10-19 16:30:32 字數 822 閱讀 1874

1 子查詢在查詢語句中可出現的位置

2 子查詢的分類

3 子查詢的優化的思路

3.1 做子查詢優化的原因

3.2 子查詢優化技術

3.3 子查詢展開

4 最常見的子查詢型別的優化

4.1 in型別

4.2 all/any/some型別

4.3 exists型別

5 例項

二 相關子查詢和非相關子查詢

這是子查詢優化的基礎,首先要區分這2個概念.

select * from t1 where col_1 = any

(select col_1 from t2 where t2.col_2 = t1.col_2);/* 子查詢語句中存在父查詢的t1表的col_2列 */

select * from t1 where col_1 = any

(select col_1 from t2 where t2.col_2 = 10);/* 子查詢語句中(t2)不存在父查詢(t1)的屬性 */

三 特別要強調的----做子查詢優化的原因

為什麼要作子查詢優化呢?

在資料庫實現早期,查詢優化器對子查詢一般採用巢狀執行的方式,即對父查詢中的每一行,都執行一次子查詢,這樣子查詢會執行很多次。這種執行方式效率很低。

而對子查詢進行優化,可能帶來幾個數量級的查詢效率的提高。子查詢轉變成為連線操作之後,會得到如下好處:

子查詢不用執行很多次。

優化器可以根據統計資訊來選擇不同的連線方法和不同的連線順序。

子查詢中的連線條件、過濾條件分別變成了父查詢的連線條件、過濾條件,優化器可以對這些條件進行下推,以提高執行效率。

Mysql 非相關子查詢和相關子查詢的執行解析

前段時間有乙個相關子查詢的sql語句,看不太懂他是如何執行的,為什麼會出現那個結果。著實糾結了一把。下面來講一下非相關子查詢和相關子查詢的執行過程是怎樣的。先看乙個非相關子查詢到sql語句。需求 查詢學生表student和學生成績表grade中成績為70分的學生的基本資訊。select t.sno,...

什麼是 相關子查詢 和 非相關子查詢

先執行主查詢,再針對主查詢返回的每一行資料執行子查詢,如果子查詢能夠返回行,則這條記錄就保留,否則就不保留。舉例1 相關子查詢查詢 查詢所有是領導的員工資訊 select from emp e1 where exists select from emp e2 where e1.empno e2.mg...

Oracle 相關子查詢

start 我們先來看兩個表的定義 使用者 create table employee userid number 9,0 not null,使用者id companyid number 9,0 公司id telno varchar2 12 使用者 alter table employee add ...