當b表的資料集必須小於a表的資料集時,用in優於exists,當a表的資料集系小於b表的資料集時,用exists優於in
優化原則:小表驅動大表,即小的資料集驅動大的資料集。
############# 原理 (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表的資料集必須小於a表的資料集時,用in優於exists。
select * from a where exists (select 1 from b where b.id = a.id)
等價於for select * from a
for select * from b where b.id = a.id
當a表的資料集系小於b表的資料集時,用exists優於in。
注意:a表與b表的id欄位應建立索引。
例如:
not in 和not exists用法類似。
MYSQL IN 與 EXISTS 的優化示例介紹
優化原則 小表驅動大表,即小的資料集驅動大的資料集。原理 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表的資料集必須...
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...