exists與not exists的原理講解

2021-10-06 15:25:37 字數 998 閱讀 4015

1.場景還原

在專案後期優化部分,mysql優化勢必是乙個重頭戲,今天筆者就sql中的exists與not exist的原理及用法給大夥講解一番,希望能給大家帶來啟發;

2.原理解釋

exists (sql 返回結果集為真)

not exists(sql 不返回結果集為真(或返回結果集為假))

3.拆解過程

①exists與not exists案例解析

select

a.*from

awhere

exists (select b.* from b when a.id = b.id)

select

a.*from

awhere

not 

exists (select b.* from b when a.id = b.id)

首先mysql底層先執行

select a.* from  a

然後將其結果集作為條件,在where中進行篩選,exists篩選結果集為true的資料項,而not exists相反,返回結果集為false的資料項

4.exists與in,not exists與not in的區別

①當a表資料大於b表資料時,選擇in比exists執行效率要高

實現同上述exits的效果

select

a.*from

awhere

a.id

in (select b.id from b where b.id = a.id)

相反,a表資料小於b表資料時,選擇exists比較高效

②not exists 與not in的區別

not in 會使索引失效,故無論在哪種情況not exists都比not in高效

改寫Minus語法為not exist

原sql select from select distinct v.parent id parentvehid,fvp.seat seat from fc vehicle v,fc vehicle parentfvp where v.parent id fvp.parent veh id minu...

In 與Exists的理解

in 表示乙個確定的值在乙個集合中找出對應的值!我理解的執行是這樣啊,先計算出子查詢的結果,然後把相關的結果臨時存放,也就產生乙個集合 但這個表在執行過程只是執行一次後生成乙個結果集 然後主表讀取一行資料,對應列的值在集合乙個個配對,找到就顯示該行,如果集合中有兩個相同的值會點樣做,我猜in要全部掃...

in與exists別亂用

in和exsits在做巢狀查詢的時候使用率很高,那麼在不恰當的地方使用不恰當的巢狀方式,將會對你的sql產生非同小可的響應,筆者曾優化過此種sql,效果天壤之別,那麼怎麼合理使用in和exsits,其實很簡單,明白了原理就不會用錯了 例子 delete from temp 7 t where not...