日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

oracle中代替in 和not in 高效方法

發(fā)布時(shí)間:2025/7/14 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle中代替in 和not in 高效方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
-- 在oracle中效率排行:表連接>exist>not exist>in>not in; -- 因此如果簡(jiǎn)單提高效率可以用exist代替in進(jìn)行操作,當(dāng)然換成表連接可以更快地提高效率, -- 具體是用left join代替not in 和not exist,用inner join 代替in和exist,這樣可以大大提高效率。具體例子如下: -- A、NOT IN、NOT EXISTS的相關(guān)子查詢可以改用LEFT JOIN代替寫法。 -- 比如: SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID NOT IN (SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS')-- 可以改寫成: SELECT A.PUB_NAME FROM PUBLISHERS A LEFT JOIN TITLES B ON B.TYPE = 'BUSINESS' AND A.PUB_ID=B. PUB_IDWHERE B.PUB_ID IS NULL -- (2) SELECT TITLE FROM TITLES WHERE NOT EXISTS(SELECT TITLE_ID FROM SALES WHERE TITLE_ID = TITLES.TITLE_ID)-- 可以改寫成: SELECT TITLE FROM TITLES LEFT JOIN SALES ON SALES.TITLE_ID = TITLES.TITLE_IDWHERE SALES.TITLE_ID IS NULL -- B、 如果保證子查詢沒有重復(fù) ,IN、EXISTS的相關(guān)子查詢可以用INNER JOIN 代替。比如: SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID IN (SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS') 可以改寫成: SELECT DISTINCT A.PUB_NAME FROM PUBLISHERS A INNER JOIN TITLES B ON B.TYPE = 'BUSINESS' AND A.PUB_ID=B. PUB_ID-- 有兩個(gè)簡(jiǎn)單例子,以說(shuō)明 “exists”和“in”的效率問(wèn)題1) select * from T1 where exists(select * from T2 where T1.a=T2.a) ;-- T1數(shù)據(jù)量小而T2數(shù)據(jù)量非常大時(shí),T1<<T2 時(shí),1) 的查詢效率高。2) select * from T1 where T1.a in (select T2.a from T2) ;-- T1數(shù)據(jù)量非常大而T2數(shù)據(jù)量小時(shí),T1>>T2 時(shí),2) 的查詢效率高。exists 用法:-- 1)句中的“select * from T2 where T1.a=T2.a” 相當(dāng)于一個(gè)關(guān)聯(lián)表查詢, -- -- 相當(dāng)于“select * from T1,T2 where T1.a=T2.a”;“exists(xxx)”它只在乎括號(hào)里的數(shù)據(jù)能不能查找出來(lái),是否存在這樣的記錄,如果存在,這1)句的where 條件成立。in的用法:2)句中的“select * from T1 where T1.a in (select T2.a from T2) ”,這里的“in”后面括號(hào)里的語(yǔ)句搜索出來(lái)的字段的內(nèi)容一定要相對(duì)應(yīng),一般來(lái)說(shuō),T1和T2這兩個(gè)表的a字段表達(dá)的意義應(yīng)該是一樣的,否則這樣查沒什么意義。---sql語(yǔ)句查詢中exists中為什么要用select 1? select * from call_cdr_xz_200609 a where and a.ori_charge<>0 and exists(select 1 from special b where a.called_nbr like b.special_nbr||'%' and b.billing_state=0 ) --,好比這個(gè),為什么要加select 1?括號(hào)中的條件字句不是恒成立的嗎,求解 如果有查詢結(jié)果,查詢結(jié)果就會(huì)全部被1替代(當(dāng)不需要知道結(jié)果是什么,只需要知道有沒有結(jié)果的時(shí)候會(huì)這樣用),可以提高語(yǔ)句的運(yùn)行效率,在大數(shù)據(jù)量的情況下,提升效果非常明顯

?

總結(jié)

以上是生活随笔為你收集整理的oracle中代替in 和not in 高效方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。