OracleSQL語句優(yōu)化技術(shù)分析

字號:

操作符優(yōu)化
    IN 操作符
    用IN寫出來的SQL的優(yōu)點是比較容易寫及清晰易懂,這比較適合現(xiàn)代軟件開發(fā)的風格。
    但是用IN的SQL性能總是比較低的,從ORACLE執(zhí)行的步驟來分析用IN的SQL與不用IN的SQL有以下區(qū)別:
    ORACLE試圖將其轉(zhuǎn)換成多個表的連接,如果轉(zhuǎn)換不成功則先執(zhí)行IN里面的子查詢,再查詢外層的表記錄,如果轉(zhuǎn)換成功則直接采用多個表的連接方式查詢。由此可見用IN的SQL至少多了一個轉(zhuǎn)換的過程。一般的SQL都可以轉(zhuǎn)換成功,但對于含有分組統(tǒng)計等方面的SQL就不能轉(zhuǎn)換了。
    推薦方案:在業(yè)務密集的SQL當中盡量不采用IN操作符。
    NOT IN操作符
    此操作是強列推薦不使用的,因為它不能應用表的索引。
    推薦方案:用NOT EXISTS 或(外連接+判斷為空)方案代替
    <> 操作符(不等于)
    不等于操作符是永遠不會用到索引的,因此對它的處理只會產(chǎn)生全表掃描。
    推薦方案:用其它相同功能的操作運算代替,如
    a<>0 改為 a>0 or a<0
    a<>’’ 改為 a>’’
    IS NULL 或IS NOT NULL操作(判斷字段是否為空)
    判斷字段是否為空一般是不會應用索引的,因為B樹索引是不索引空值的。