MYSQL IN 與 EXISTS 的優化示例介紹

2021-07-10 13:42:09 字數 636 閱讀 1287

當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...