MySQL中exists和join的區別

2021-07-08 17:45:00 字數 860 閱讀 7954

今天在公司專案中發現call一條api的資料,居然要4.9s,通過檢視其sql語句以及網上查詢相關資料,發現是:exists和join的區別:

select t.*

from topic t

where 1=1

and t.rel_type = 'g'

and exists(

select 1 from user_group_rel r where

r.group_id = t.rel_id

and r.user_id = 'evyuzm'

)and (t.sign != 'hide' or t.sign is null)

andt.state != 'del'

order by

t.sign desc,t.sign_time asc,

t.create_time

desc

exists在命中率高的情況下查詢速度較快,像這種需要判斷的表的資料量較大,而條件表的資料量較少時不宜使用。inner join相對較穩定一些,不會隨命中率的變化而影響效能

select t.*

from topic t

inner join user_group_rel r on t.rel_id = r.group_id 

and r.user_id = 'evyuzm'

and t.rel_type ='g'

and (t.sign != 'hide' or t.sign is null)

and t.state != 'del'

order by

t.sign desc,t.sign_time asc,

t.create_time

desc;

MySql中in和exists效率

詳見 mysql中的in語句是把外表和內錶作hash 連線,而exists語句是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。一直大家都認為exists比in語句的效率要高,這種說法其實是不準確的。這個是要區分環境的。如果查詢的兩個表大小相當,那麼用in和exists差別不大。如果兩個表中...

join mysql 版本 MySql中的join

建立表 create table t2 id int 11 not null,a int 11 default null,b int 11 default null,primary key id key a a engine innodb drop procedure idata delimiter...

MySQL中的in和exists區別

in和exists的區別分析 select from a where id in select id from b select from a where exists select 1from b where a.id b.id 對於以上兩種情況,in是在記憶體裡遍歷比較,而exists需要查詢資...