【问题标题】:Oracle/PLSQL performanceOracle/PLSQL 性能
【发布时间】:2010-10-27 03:32:12
【问题描述】:

当您将存储过程分解为多个过程而不是拥有一个大过程时,性能是否有任何差异?
哪个更快?

例如:

mainSP
  callSP1
  callSP2
  callSP3
end;

而不是:

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

【问题讨论】:

    标签: performance oracle stored-procedures plsql


    【解决方案1】:

    在极少数情况下,任何性能优势都会出现,例如主进程在循环中被多次调用,每次单独的迭代都不会花费太多时间。

    大多数情况下,将程序分解为逻辑步骤所带来的可维护性将远远超过可能带来的微小性能提升。

    如前所述,基准测试和测试 - 除非您看到显着的好处,否则请追求可维护性 - 未来的开发人员会感谢您!

    【讨论】:

      【解决方案2】:

      在 10g 及更高版本中,有一个“优化编译器”。

      11g中,它将执行“子程序内联。子程序内联用被调用子程序的副本替换子程序调用(对同一程序单元中的子程序)”

      我认为内联是 10g 的一部分,但在那里找不到它的记录。

      【讨论】:

      • 内联肯定是在 11g 中添加的。早期版本的 Oracle(8i,可能是 9i)有很大的函数开销,这导致我们在性能胜过 DRY 原则的情况下自己“内联”代码。
      【解决方案3】:

      理论上,每次从另一个存储过程调用一个存储过程都会对性能造成轻微影响。然而,确切的影响会根据参数的数量和被调用的存储过程的类型而有所不同。

      一般来说应该没关系。但是当有疑问时测试。

      【讨论】:

      • 我注意到你提到了参数数量。使用 3 个或 4 个游标是否存在性能问题。
      【解决方案4】:

      这取决于正在发生的事情。

      如果 mainSP 在 callSP1 上循环,而 mainSP 可以只执行单个语句来处理一组数据,那么它会更慢。

      调用其他过程有一点点开销,传回错误消息也有点麻烦。

      如果您要重复所有代码,请制定一个通用例程。其他明智的保持在一起。

      【讨论】:

        猜你喜欢
        • 2015-03-20
        • 2018-01-25
        • 1970-01-01
        • 2018-04-21
        • 2017-11-30
        • 2010-12-25
        • 2018-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多