mysql in 和exists查詢效率總結

2021-08-03 06:51:30 字數 782 閱讀 6882

看到網上好多的文章,關於in 和exists,我自己專門去校驗了一下,自己通過儲存過程,迴圈增加了10萬條資料,

//建立表

drop table if exists tb_test;

create table tb_test(

id int primary key auto_increment not null,

name varchar(20)

)//儲存過程

delimiter &&

begin

declare j int default 0;

while jinsert into tb_test(name) values('王威振');

set j=j+1;

end while;

end &&

delimiter

然後進行查詢

select * from tb_test where   exists(select name from tb_test  name = '王威振')

select * from tb_test where name in  ('王威振')

其實exists 和in 要根據表的大小,查詢tb_test 資料大於條件中查詢的資料用in花費的成本低,否則用exists.

可以通過 explain format  = json 檢視語句的執行計畫,然後看到花費的成本。

總的來說,select * from test t where t.id in (select id from tb ) 如果test 表資料》tb 用in

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 的優化示例介紹

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

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表的資料集必須...