Oracle中 IN 和 EXISTS 的性能區別和使用注意事項

1.對於IN 和 EXISTS 的性能區別: 

    (1). select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;

         T1數據量小而T2數據量非常大時,T1<<T2 時,(1)的查詢效率高。

    (2). select * from T1 where T1.a in (select T2.a from T2) ;

          T1數據量非常大而T2數據量小時,T1>>T2 時, (2) 的查詢效率高。

即,如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in,反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。 

 
2.NOT IN 與NOT EXISTS:
NOT EXISTS 與 NOT IN 不能完全互相替換,看具體的需求。如果選擇的列可以爲空,則不能被替換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章