新聞中心
以下的文章主要講述的是Oracle in 與 not in在實(shí)際應(yīng)用中的區(qū)別,我們大家都知道在很多相關(guān)的軟件系統(tǒng)中,其系統(tǒng)的實(shí)際性能在很大程度上是由數(shù)據(jù)庫(kù)的相關(guān)性能所決定。以前也曾經(jīng)做過(guò)很多次關(guān)于性能方面的各種測(cè)試。

創(chuàng)新互聯(lián)建站總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、微信小程序定制開(kāi)發(fā)、軟件開(kāi)發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷(xiāo)領(lǐng)域創(chuàng)造價(jià)值而不懈努力!
特別是關(guān)于Oracle的,我想到也應(yīng)該記錄下來(lái)一部分,為大家共享。
事情發(fā)生在我們的系統(tǒng)從sqlserver移植到Oracle,用戶在一個(gè)查詢的操作上等待的時(shí)間無(wú)法忍受了,我們關(guān)于這個(gè)查詢的處理與原來(lái)的方式一下,難道sqlserver 同Oracle有什么地方不一樣么,讓我們來(lái)看看Oracle有什么地方有問(wèn)題,或者是我們使用的有問(wèn)題?
業(yè)務(wù)問(wèn)題大概可以這樣描述,一個(gè)父表,一個(gè)子表,查詢的結(jié)果是找到子表中沒(méi)有使用父表id的記錄,這種情況估計(jì)很多系統(tǒng)都會(huì)牽涉得到。讓我們來(lái)舉一個(gè)例子:
表一: 父表 parent
表二: 子表 childen
父表存儲(chǔ)父親,子表存儲(chǔ)孩子,然后通過(guò)pid和父表關(guān)聯(lián),查詢需要的結(jié)果是找到尚未有孩子的父親。
我們來(lái)看一下查詢語(yǔ)句的寫(xiě)法:
- select * from parent where id not in (select pid from childen)
這種標(biāo)準(zhǔn)的寫(xiě)法在子表存在50萬(wàn)條的記錄的時(shí)候,查詢時(shí)間超過(guò)了10秒,遠(yuǎn)遠(yuǎn)大于原來(lái)的sql server服務(wù)器的一秒。我在解決的時(shí)候想到了一個(gè)方法:
- select * from parent where id in
- ( select id from parent minus select pid from childen )
正常理解下,這個(gè)語(yǔ)句應(yīng)該更加費(fèi)時(shí),但是事實(shí)完全出乎意料,這條語(yǔ)句不僅僅在子表存在大量記錄的情況下速度良好,在子表少量數(shù)據(jù)的情況下速度也非常的好,基本在1秒內(nèi)完成。
這個(gè)結(jié)果可以很明顯的證明Oracle 在子查詢的內(nèi)部處理的時(shí)候,使用 Oracle in 和 not in 的巨大區(qū)別,希望用到這種方式的用戶注意,也期待有人解釋其中的問(wèn)題。
網(wǎng)頁(yè)題目:Oraclein與notin在實(shí)際應(yīng)用的不同之處
新聞來(lái)源:http://fisionsoft.com.cn/article/djhcpdp.html


咨詢
建站咨詢
