簡(jiǎn)述Oracle中in和exists的不同
一直以來,大家認(rèn)為exists比in速度快,其實(shí)是不準(zhǔn)確的。且看接下來的具體分析: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)行全盤掃描
因此,not exists 始終比not in 的效率高
四、第四種情況
in與==效果是相同的
總結(jié)
以上所述是小編給大家介紹的Oracle中in和exists的不同,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
EXISTS關(guān)鍵字在Oracle中的簡(jiǎn)單使用例子
在Oracle中IN和EXISTS都是用于子查詢的比較運(yùn)算符,但它們的使用方式和操作結(jié)果有所不同,這篇文章主要給大家介紹了關(guān)于EXISTS關(guān)鍵字在Oracle中的簡(jiǎn)單使用,需要的朋友可以參考下2024-04-04oracle ORA-00031:session marked for kill(標(biāo)記要終止的會(huì)話)解決方法
這篇文章主要介紹了oracle ORA-00031:session marked for kill(標(biāo)記要終止的會(huì)話)解決方法 ,需要的朋友可以參考下2015-12-12Oracle數(shù)據(jù)庫(kù)如何創(chuàng)建第一張表
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)如何創(chuàng)建第一張表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Oracle中 關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)過程和存儲(chǔ)函數(shù)的使用
本篇文章,小編將為大家介紹,在Oracle中 關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)過程和存儲(chǔ)函數(shù)的使用,有需要的朋友可以參考一下2013-04-04Navicat for oracle創(chuàng)建數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Navicat for oracle創(chuàng)建數(shù)據(jù)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11oracle實(shí)現(xiàn)將字段按逗號(hào)拼接/按逗號(hào)分為多行實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于oracle實(shí)現(xiàn)將字段按逗號(hào)拼接/按逗號(hào)分為多行的相關(guān)資料,因?yàn)樽罱?xiàng)目表里的某個(gè)字段存儲(chǔ)的值是以逗號(hào)分隔開來的,所以這里給大家總結(jié)下,需要的朋友可以參考下2023-07-07oracle 優(yōu)化的一點(diǎn)體會(huì)
oracle 優(yōu)化的一點(diǎn)體會(huì)大家可以參考下,提升運(yùn)行效率。2009-10-10