MYSQL IN 與 EXISTS 的優化示例介紹

2022-09-29 17:06:17 字數 901 閱讀 5187

優化原則:小表驅動大表,即小的資料集驅動大的資料集。

############# 原理 (rbo) #####################

程式設計客棧select * from a where id in (select id from b)

等價於:

for select id from b

for select * from a where a.id = b.id

當b表的資料集必須www.cppcns.com小於a表的資料集時,用in優於exists。

select * fro程式設計客棧m a where exists (select 1 from b whe程式設計客棧re b.id = a.id)

等價於for select * from a

for select * from b where b.id = a.id

當a表的資料集系小於b表的資料集時,用exists優於in。

注意:a表與b表的id欄位應建立索引。

例如:/** 執行時間:0.313s **/

select sql_no_cache * from rocky_member m where exists (select 1 from rocky_vip_appro a where m.id = a.user_id and a.passed = 1);

/** 執行時間:0.160s **/

select sql_no_cachfuhunhqcze * from rocky_member m where m.id in(select id from rocky_vip_appro where passed = 1);

not in 和not exists用法類似。

本文標題: mysql in 與 exists 的優化示例介紹

本文位址:

MYSQL IN 與 EXISTS 的優化示例介紹

當b表的資料集必須小於a表的資料集時,用in優於exists,當a表的資料集系小於b表的資料集時,用exists優於in 優化原則 小表驅動大表,即小的資料集驅動大的資料集。原理 rbo select from a where id in select id from b 等價於 for selec...

MySQL in和exists查詢對比

外表 tablea 內錶 tableb in select from tablea where tablea.id in select a id from tableb exists select from tablea where exists select from tableb where t...

MySQL in與exists 小表驅動大表

小表驅動大表 寫sql前確定幾件事 以員工 emp 和部門 dept 為例 1 誰在外 左 誰在裡 右 根據中文描述來判斷 找出指定部門裡的員工 員工在外 左 部門在裡 右 找出有員工參加的部門 部門在外 左 員工在裡 右 2 誰大誰小 根據資料量 當小表在裡時,使用in 當大表在裡時,使用exis...