2009-05-18 164 views
1

將存儲過程分解爲多個過程而不是大的過程時,性能是否有任何區別?
哪一個更快?
Oracle/PLSQL性能

例如:

mainSP 
    callSP1 
    callSP2 
    callSP3 
end; 

而不是:

SP 
    .... 
    .... 
    .... 

回答

6

任何性能優勢將在非常罕見的情況下發生,例如,主循環在循環中被多次調用,並且每次迭代都不需要太多時間。

大多數情況下,將程序分解爲邏輯步驟的可維護性遠遠超過可能獲得的微小性能提升。

如前所述,基準和測試 - 除非您看到明顯的好處,否則要維護 - 未來的開發人員會感謝您!

0

這取決於發生了什麼。

如果mainSP正在通過callSP1循環,mainSP可能只是執行單個語句來處理一組數據,那麼它會更慢。

在調用其他過程時會有一些額外的開銷,並且在傳回錯誤消息時也有一點痛苦。

如果您全部複製代碼,請創建一個常用例程。其他明智保持在一起。

2

從理論上講,每次從另一個存儲過程調用存儲過程時都會遇到輕微的性能下降。但是,確切的影響因被調用的參數數量和存儲過程類型而異。

總的來說應該沒關係。但是,如果有疑問測試。

+0

我注意到你說了一些有關參數的東西。有3或4個遊標有任何性能問題。 – jDeveloper 2009-05-18 21:03:56

6

在10g及以上,有一個'優化編譯器'。

11g,它會做「子程序內聯。子程序內聯替換一個子程序調用(在同一程序單元子程序)與調用的子程序的副本」

我認爲內聯是10克一部分,但在那裏找不到記錄。

+1

內聯絕對是在11g中添加的。早期版本的Oracle(8i,也許是9i)具有顯着的功能開銷,這導致我們在性能超過DRY原則的情況下自行「內聯」代碼。 – 2009-08-12 16:15:42