綠色資源網:您身邊最放心的安全下載站! 最新軟件|熱門排行|軟(ruǎn)件分(fèn)類|軟件專題|廠商(shāng)大全

綠色資源(yuán)網

技術教程(chéng)
您的位置:首頁數據庫類Oracle → ORACLE SQL語句優化(huà)技術分析

ORACLE SQL語句優(yōu)化(huà)技術(shù)分析

我(wǒ)要評論 2009/04/16 01:43:31 來源:綠色資源網 編輯:佚名 [ 中(zhōng) ] 評論:0 點(diǎn)擊:1449次

    操作符優化

    IN 操作符

    用IN寫出(chū)來的SQL的(de)優點是比較容易寫及清晰易懂(dǒng),這比較(jiào)適合現(xiàn)代軟件開(kāi)發的風格。

    但是用IN的SQL性能總是比(bǐ)較低的(de),從ORACLE執行(háng)的(de)步驟來(lái)分析用IN的SQL與不用IN的SQL有以下區(qū)別:

    ORACLE試圖將(jiāng)其轉換成多個表的(de)連接,如果轉換不成功則先(xiān)執行IN裏麵的(de)子查詢,再查詢外層的表記錄,如果轉換成功則直接采用多(duō)個表的連接(jiē)方式查詢。由此可(kě)見用IN的SQL至少多了一(yī)個轉(zhuǎn)換(huàn)的(de)過程。一般的SQL都(dōu)可以轉換成功,但對於含(hán)有分(fèn)組統計(jì)等(děng)方麵的(de)SQL就不能轉換了。

    推薦方案:在業務密(mì)集的(de)SQL當中盡量不采用IN操作符。

    NOT IN操作符

    此操作是強(qiáng)列推薦不使(shǐ)用的,因(yīn)為它(tā)不(bú)能應用表的索引。

    推(tuī)薦方案:用NOT EXISTS 或(外連(lián)接+判斷為空(kōng))方案代(dài)替

    <> 操作符(不等於)

    不等於操作符是永遠(yuǎn)不會用(yòng)到索引的,因此對(duì)它的處(chù)理隻會產生(shēng)全表掃描。

    推薦方案:用其它相同功(gōng)能的操作運算代替,如

    a<>0 改(gǎi)為(wéi) a>0 or a<0

    a<>’’ 改為 a>’’

    IS NULL 或IS NOT NULL操作(判斷(duàn)字段是(shì)否(fǒu)為空)

    判斷字段是否為空一般是不會應用(yòng)索引的,因為(wéi)B樹索引(yǐn)是不索引空值的。

    推薦方案:

    用其它相同(tóng)功(gōng)能的(de)操作運算代替,如

    a is not null 改為 a>0 或a>’’等。

    不允許字段(duàn)為空,而(ér)用一個缺省值(zhí)代替空值(zhí),如業擴申請(qǐng)中狀態字段不允許為空,缺省為申請。

    建立位(wèi)圖索引(有分區的表不能建,位圖索(suǒ)引比較難控製,如字段值太(tài)多索引會(huì)使性(xìng)能下降,多人更新(xīn)操作會增加數(shù)據塊鎖的現象)

    > 及 < 操作符(fú)(大於(yú)或小(xiǎo)於操作符)

    大(dà)於或(huò)小於(yú)操作符一(yī)般情(qíng)況下是不用(yòng)調整的,因為它有索引就會采用索引查找,但有(yǒu)的情況下可(kě)以對它進行優化,如一(yī)個表有(yǒu)100萬記錄,一個數值型字段(duàn)A,30萬記錄的A=0,30萬記錄的A=1,39萬記錄的(de)A=2,1萬記錄(lù)的A=3。那麽(me)執行A>2與(yǔ)A>=3的效果就有很大的區別了,因為A>2時ORACLE會先找出為2的記錄索(suǒ)引再進行比較,而A>=3時(shí)ORACLE則直接找到=3的記錄索(suǒ)引(yǐn)。

    LIKE操作(zuò)符

    LIKE操(cāo)作符(fú)可以應(yīng)用通配符查詢,裏麵的通(tōng)配符組合可能達到幾乎是任意的查詢,但是如果(guǒ)用(yòng)得不好則會產(chǎn)生性能上的問題,如LIKE ‘%5400%’ 這種查詢不會引用索引,而LIKE ‘X5400%’則會引用範圍索引。一(yī)個實(shí)際例子:用YW_YHJBQK表中營業(yè)編(biān)號後(hòu)麵的戶標識號可來查詢營業編號 YY_BH LIKE ‘%5400%’ 這(zhè)個(gè)條件(jiàn)會產生全表掃描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 則會(huì)利用YY_BH的索引進(jìn)行兩個(gè)範圍的查詢,性能肯定大大提高。

關鍵詞(cí):ORACLE,SQL語句

閱讀本(běn)文(wén)後您有(yǒu)什麽感想? 已有 人給出評(píng)價(jià)!

  • 2 歡迎喜歡
  • 1 白癡
  • 1 拜托
  • 1 哇
  • 1 加油
  • 1 鄙視