我的任务是提高我们应用程序中的一些包和过程的性能。我们大约有一个包,它有大约15-20个过程的子程序。
以下是我需要澄清的内容。
我正在将局部变量和过程参数的数据类型从NUMBER更改为PLS_INTEGER,并且在子程序中也是如此,但不是所有子程序都会影响调用包是否具有PLS_INTEGER而子程序具有NUMBER数据类型,例如。
PACK1.MAINPROC ( a1 PLS_INTEGER,a2 PLS_INTEGER,a3 PLS_INTEGER,a4 PLS_INEGER )
procedure SUBPROCEDURE1( a1 NUMBER,a2 NUMBER)
begin
....
end如上所述,主程序包有参数a1,a2有PLS_INTEGER,但是在子过程中使用a1和a2作为数字,这对性能有什么问题吗?
发布于 2018-05-27 12:38:15
PLS_INTEGER可能不会以任何有意义的方式提高您的性能。除非您有一个包含大量数学运算的紧密循环,否则将NUMBER更改为PLS_INTEGER不太可能带来任何好处。即使您确实有一个紧凑的循环,提高性能的最好方法通常是用基于集合的解决方案来代替它。
这个问题听起来像是强迫症的症状。将NUMBER更改为PLS_INTEGER是您始终可以进行的简单、容易和快速的更改之一,但最终仍然毫无价值。
在调优之前,您应该在脑海中有一个特定的性能问题和目标。然后第二个任务是分析代码,找出最慢的部分和值得关注的部分。这听起来很简单,但是专注于容易的事情而不是重要的事情是很有诱惑力的。
(如果你已经这样做了,那么请在这里发布该信息。如果您确实遇到更改数据类型可能有所帮助的情况,我们将需要更多详细信息进行调查。)
https://stackoverflow.com/questions/50505227
复制相似问题