今天在公司專案中發現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需要查詢資...