Oracle SQL中IN與EXISTS的比較

2021-08-29 11:09:31 字數 711 閱讀 2941

在oracle sql中取資料時有時要用到in 和 exists 那麼他們有什麼區別呢?

1 效能上的比較

比如select * from t1 where x in ( select y from t2 )

執行的過程相當於:

select *

from t1, ( select distinct y from t2 ) t2

where t1.x = t2.y;

相對的select * from t1 where exists ( select null from t2 where y = x )

執行的過程相當於:

for x in ( select * from t1 )

loop

if ( exists ( select null from t2 where y = x.x )

then

output the record

end if

end loop

表 t1 不可避免的要被完全掃瞄一遍

分別適用在什麼情況?

以子查詢 ( select y from t2 )為考慮方向

如果子查詢的結果集很大需要消耗很多時間,但是t1比較小執行( select null from t2 where y = x.x )非常快,那麼exists就比較適合用在這裡

相對應得子查詢的結果集比較小的時候就應該使用in.

EX2010與EX2013共存遷移01 設計及說明

2013 年之前發布的exchange 2013版本是不支援共存的,只有在2013年4月2日發布的exchange 2013 cu1版才支援共存,exchange 2010必須為sp3版本才支援和2013共存及遷移,exchange2003不支援和2013共存及遷移。下面是詳細的共存說明 內部網域名...

EX2010與EX2013共存遷移05 公網切換

繼上篇文章中的介紹,現在我們的專案已經完成exchange 2010和2013共存搭建 exchange 2013基本配置,但共存階段還遠遠沒有完成,大家千萬別開始進行資料遷移,如有一丁點沒有考慮到就會全盤皆輸。注意 一定要注意細節。1 當前的拓撲是這樣的 2 當前的現狀是這樣的 1 公網記錄都指向...

EX2010與EX2013共存遷移05 公網切換

繼上篇文章中的介紹,現在我們的專案已經完成exchange 2010和2013共存搭建 exchange 2013基本配置,但共存階段還遠遠沒有完成,大家千萬別開始進行資料遷移,如有一丁點沒有考慮到就會全盤皆輸。注意 一定要注意細節。1 當前的拓撲是這樣的 2 當前的現狀是這樣的 1 公網記錄都指向...