【发布时间】:2010-10-27 03:32:12
【问题描述】:
当您将存储过程分解为多个过程而不是拥有一个大过程时,性能是否有任何差异?
哪个更快?
例如:
mainSP
callSP1
callSP2
callSP3
end;
而不是:
SP
....
....
....
【问题讨论】:
标签: performance oracle stored-procedures plsql
当您将存储过程分解为多个过程而不是拥有一个大过程时,性能是否有任何差异?
哪个更快?
例如:
mainSP
callSP1
callSP2
callSP3
end;
而不是:
SP
....
....
....
【问题讨论】:
标签: performance oracle stored-procedures plsql
在极少数情况下,任何性能优势都会出现,例如主进程在循环中被多次调用,每次单独的迭代都不会花费太多时间。
大多数情况下,将程序分解为逻辑步骤所带来的可维护性将远远超过可能带来的微小性能提升。
如前所述,基准测试和测试 - 除非您看到显着的好处,否则请追求可维护性 - 未来的开发人员会感谢您!
【讨论】:
在 10g 及更高版本中,有一个“优化编译器”。
在11g中,它将执行“子程序内联。子程序内联用被调用子程序的副本替换子程序调用(对同一程序单元中的子程序)”
我认为内联是 10g 的一部分,但在那里找不到它的记录。
【讨论】:
理论上,每次从另一个存储过程调用一个存储过程都会对性能造成轻微影响。然而,确切的影响会根据参数的数量和被调用的存储过程的类型而有所不同。
一般来说应该没关系。但是当有疑问时测试。
【讨论】:
这取决于正在发生的事情。
如果 mainSP 在 callSP1 上循环,而 mainSP 可以只执行单个语句来处理一组数据,那么它会更慢。
调用其他过程有一点点开销,传回错误消息也有点麻烦。
如果您要重复所有代码,请制定一个通用例程。其他明智的保持在一起。
【讨论】: