2009-05-18 131 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