優化巢狀查詢

2021-10-06 20:18:30 字數 1912 閱讀 8151

優化巢狀查詢

​ 子查詢有些情況下可以被更有效的連線(join)替代。因為連線(join)不需要再記憶體中建立臨時表來完成這個邏輯上需要兩個步驟的查詢工作。如下所示:可以看出查詢關聯的型別從 index_subquery 調整為 ref.

#子查詢

mysql> desc select * from customer where customer_id not in(select customer_id from payment) \g;

*************************** 1. row ***************************

id: 1

select_type: primary

table: customer

partitions: null

type: all

possible_keys: null

key: null

key_len: null

ref: null

rows: 599

filtered: 100.00

extra: using where

*************************** 2. row ***************************

id: 2

select_type: dependent subquery

table: payment

partitions: null

type: index_subquery

possible_keys: idx_fk_customer_id

key: idx_fk_customer_id

key_len: 2

ref: func

rows: 26

filtered: 100.00

extra: using index

2 rows in set, 1 warning (0.00 sec)

error:

no query specified

# join 查詢

mysql> desc select * from customer a left join payment b on a.customer_id=b.customer_id where b.customer_id is null \g;

*************************** 1. row ***************************

id: 1

select_type: ******

table: a

partitions: null

type: all

possible_keys: null

key: null

key_len: null

ref: null

rows: 599

filtered: 100.00

extra: null

*************************** 2. row ***************************

id: 1

select_type: ******

table: b

partitions: null

type: ref

possible_keys: idx_fk_customer_id

key: idx_fk_customer_id

key_len: 2

ref: sakila.a.customer_id

rows: 26

filtered: 100.00

extra: using where; not exists

2 rows in set, 1 warning (0.00 sec)

MySQL 優化巢狀查詢和分頁查詢

巢狀查詢 子查詢 可以使用select語句來建立乙個單列的查詢結果,然後把這個結果作為過濾條件用在另乙個查詢中。巢狀查詢寫起來簡單,也容易理解。但是,有時候可以被更有效率的連線 join 替代。現在假如要找出從來沒有在 中消費的客戶,也就是查詢在客戶customer表中但是不在支付payment表中...

MySQL 優化巢狀查詢和分頁查詢

巢狀查詢 子查詢 可以使用select語句來建立乙個單列的查詢結果,然後把這個結果作為過濾條件用在另乙個查詢中。巢狀查詢寫起來簡單,也容易理解。但是,有時候可以被更有效率的連線 join 替代。現在假如要找出從來沒有在 中消費的客戶,也就是查詢在客戶customer表中但是不在支付payment表中...

迴圈巢狀優化!!

第一部分說明 1 將大的迴圈放到內測,小的迴圈放到外側,確實能提高效率 全面測試巢狀多層for迴圈的效能。author 老紫竹的家 laozizhu.com public class testforloop system.out.println system.currenttimemillis t ...