一直以來(lái),大家認(rèn)為exists比in速度快,其實(shí)是不準(zhǔn)確的。且看接下來(lái)的具體分析:in其實(shí)是將外表和內(nèi)表進(jìn)行hash join,exists是先對(duì)外表進(jìn)行l(wèi)oop操作,然后每次loop后再對(duì)內(nèi)表進(jìn)行查詢。
如果兩張表大小差不多,那么exists和in的效率差不多。
例如: 一張大表為A,一張小表B
一、第一種情況
select * from A where mm in (select mm from B)
效率高,這里用到的是大表A上的索引
select * from B exists (select mm from A where mm=B.mm)
效率高,這里用到的是小表B上的索引
二、第二種情況
select * from B where mm in (select mm from A)
效率低,這里用到的是小表B上的索引
select * from A exists (select mm from B where mm=A.mm)
效率高,這里用到的是大表A上的索引
三、第三種情況
not exists 在使用時(shí)依然會(huì)用到表上的索引,但是not in會(huì)進(jìn)行全盤(pán)掃描
因此,not exists 始終比not in 的效率高
四、第四種情況
in與==效果是相同的
總結(jié)
以上所述是小編給大家介紹的Oracle中in和exists的不同,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- Oracle In和exists not in和not exists的比較分析
- Plsql Developer連接Oracle時(shí)出現(xiàn)Could not initialize oci.dll解決方案
- Oracle minus用法詳解及應(yīng)用實(shí)例
- linux系統(tǒng)oracle數(shù)據(jù)庫(kù)出現(xiàn)ora12505問(wèn)題的解決方法
- oracle中not exists對(duì)外層查詢的影響詳解