優化原則:小表驅動大表,即小的資料集驅動大的資料集。
############# 原理 (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...