oracle 中sql優化的幾種方法


  • 最基本最簡單的方式是減少訪問數據庫的次數。oracle在內部執行了許多工作,比如解析SQL語句, 估算索引的利用率,  讀數據塊等等,都將大量耗費oracle數據庫的運行。

    oracle sql優化的幾種方法
  •  

    選擇最有效率的表名順序,也將明顯提升oracle的性能。 oracle解析器是按照從右到左的順序處理FROM子句中的表名。 

    oracle sql優化的幾種方法
  •  

    在執行SELECT子句時盡量避免使用 “*”,因為oracle在解析的過程中,會將“*” 依次轉換成列名, 這是通過查詢數據字典完成的, 這將耗費更長的時間。

    oracle sql優化的幾種方法
  •  

    可以好好利用DECODE函數,該函數可以避免重復掃描相同記錄,或者重復連接相同的表。

    oracle sql優化的幾種方法
  •  

    可以在SQL*Plus和SQL*Forms以及Pro*C中重新設置ARRAYSIZE參數。如此可以明顯增加每次數據庫訪問時的檢索數據量 。這里的建議值為200。

    oracle sql優化的幾種方法
  •  

    盡量用TRUNCATE語句替代DELETE語句。當執行TRUNCATE命令時, 回滾段不會存放任何可被恢復的信息,所有數據不能被恢復。因此很少資源被調用,整個執行時間就會很短。

    oracle sql優化的幾種方法
  •  

    在使用oracle時,盡量多使用COMMIT命令。 該命令可以明顯釋放運行資源,因此程序的性能得到明顯提高。 

    oracle sql優化的幾種方法
  •  

    可以通過用索引提高效率。oracle使用了樹形的數據結構。通過合理的索引,數據查詢時明顯快於全表掃描,因此可以顯著提高檢索數據的效率。  

    oracle sql優化的幾種方法
     
     

    根據執行計划進行優化的一般步驟

    將瓶頸sql塊單獨取出,查看其執行計划,

    首先檢查其中使用了全表掃描的對象,判斷其是否合適。引發錯誤使用的情形通常是:

    1)  沒有建立合適的索引列導致全表掃描

    2)  非函數索引列使用了函數引發全表掃描

    3)   對象統計信息過舊或未收集導致全表掃描、

    4)  對於位圖索引,直方圖信息的缺失有時也會導致錯誤的全表掃描

    然后檢查其中無用的表,確認無用的表可以直接去掉減少訪問步驟減小系統開銷。

    接着檢查其中是否有重復訪問的表,查看是否可以減少訪問次數一般可以通過使用with或者建立中間表來優化。

    優化訪問路徑,數據庫優化器也有不那么聰明的時候,有時候它生成的訪問路徑可能並不是最優的,可嘗試使用hint來改變訪問路徑進行優化

    常用hint:

    /*+full( )*/表明對表選擇全局掃描的方法.

    /*+use_nl( )*/在多表關聯查詢中,指定使用nest loops方式進行多表關聯。

    /*+use_hast( )*/在多表關聯查詢中,指定使用hash join方式進行多表關聯。

    /*+index( )*/ 使用指定表的指定索引

    /*+ append */ 以直接加載的方式將數據加載入庫

    /*+leading( )*/在多表關聯查詢中,指定哪個表作為驅動表,即告訴優化器首先要訪問哪個表上的數據。

    /*+ parallel() */ 在sql中指定執行的並行度,這個值將會覆蓋自身的並行度

    看Description的基數(執行結果返回的數據的行數)和自己預估的基數是否大致一直,不一致則考慮其它影響效率的情況,如統計信息比較舊等。

     
     
     
     
     
     
     
     
     
     

  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM