優化巢狀查詢
子查詢有些情況下可以被更有效的連線(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 ...