在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 公網記錄都指向...