“優秀樣本”: Oracle代碼規程

來源:互聯網
上載者:User

 在PL/SQL中使用陣列處理是一個很好的做法(如,使用bulk collect和forall)。批量處理能夠大大減少PL/SQL語句執行引擎的環境切換次數,從而提高其效能。

  另一個優秀樣本是把預存程序中的所有代碼放入鎖定的軟體包中,這樣可以產生模組單元。把預存程序放入軟體包裡可以實現相關程式和功能的分組。當
單個包被使用,整個軟體包都會載入記憶體中(記憶體會啟動整個軟體包?),把磁碟存取時間減到最少。通過這個方法我們同樣可以把整個應用程式套件組合載進記憶體中,防
止發生重新載入和代碼解析,從而減少嚴重影響效能的代碼遞迴。

  PL/SQL(和SQL)的另一個優秀樣本是使用適當的變數類型(當你需要NUMBER時不要使用VARCHAR2,反之亦然)。使用不適當的變數(用character跟number進行比較)會導致無用索引。保證變數類型正確的一種方法就是使用%TYPE 和%ROWTYPE。

  還有就是永遠使用DBMS_PROFILER或使用像Quest Software的Quest Code Tester工具來驗證迴圈邏輯。DBMS_PROFILER是Oracle提供的一個軟體包,能夠使你的代碼產生對每行執行時間及所需時間的追蹤。你可以驗證迴圈執行次數應為最少。

  你同樣應該驗證適當的IF-THEN-ELSE結構。我的意思是你應該把最常用的選項放在前面(比如exit test)。這個方法同樣使用於CASE結構。

  PL/SQL(以及Java、C、C++和其他所有Oracle相關的3GLs)中,另一個更為重要的優秀樣本是首先調優SQL。即使是世界上設計最精密的程式,如果其中含有的SQL很差的話,運行起來效能也會不好。Quest的SQL Optimizer、Performance Analyzer、TOAD和SQL Navigator都能夠最佳化SQL。

  在測試PL/SQL-SQL代碼的時候,應利用匿名PL/SQL塊來保證處理環境的相似性。如果你在一個標準的SQL環境裡用文字代替綁定變數來進行測試,你所得到的執行計畫會不同於當你使用匿名PL/SQL塊和綁定變數時得到的執行計畫,因此你的調整很可能不能獲得很好的結果。使用Quest Code Tester能夠保證你能獲得你想要的結果。

  還有一個良好的編程做法是很好地利用暫存資料表和PL/SQL索引表。不正確地使用”normal”表進行臨時儲存會降低效能,因此應使用暫存資料表。而當記憶體空間足夠運行PL/SQL表時使用暫存資料表也會大大降低效能。你也可以利用視圖來建立中間結果的緩衝表。

  還有一個很簡單易行的優秀樣本是在IN OUT和OUT變數上利用NOCOPY。在一個使用IN OUT或OUT的PL/SQL程式中,如果NOCOPY關鍵字沒有包含在其頁首的變數聲明中,所有的變數都會通過copyout程式傳值(傳值而非傳引用)。而使用NONCOPY,所有通過引用傳值,這樣做會大大提高運行效能。

  最後,還要求所有SQL開發人員產生解釋執行計畫,然後再經由同行評審。在較大的開發計劃裡,資料庫管理員不可能檢查所有的代碼看是否獲得最佳的效能,因此開發人員首先對SQL代碼效能進行調優是很必要的。只要開發人員把SQL的索引功能調優,調整為正確的邏輯和技術,資料庫管理員便能夠對難以處理的問題代碼進行更進階的調優。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.