關於oracle中in和exists的區別


一般來說,這兩個是用來做兩張(或更多)表聯合查詢用的,in是把外表和內表作hash 連接,而exists 是對外表作loop 循環,假設有A、B兩個表,使用時是這樣的:

1、select * from A where id in (select id from B)--使用in

2、select * from A where exists(select B.id from B where B.id=A.id)--使用exists
也可以完全不使用in和exists:

3、select A.* from A,B where A.id=B.id--不使用in和exists

具體使用時到底選擇哪一個,主要考慮查詢效率問題:

第一條語句使用了A表的索引

第二條語句使用了B表的索引

第三條語句同時使用了A表、B表的索引

如果A、B表的數據量不大,那么這三個語句執行效率幾乎無差別;

如果A表大,B表小,顯然第一條語句效率更高,反之,則第二條語句效率更高;

第三條語句盡管同時使用了A表、B表的索引,單掃描次數是笛卡爾乘積,效率最差。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM