Oracle SQL内联公式与函数性能

普利基

我想知道内联计算的使用是否与用户定义的函数具有相同的性能,或者该函数会产生更多的开销?

由于更好的可读性,我希望使用第二个变体(带有函数)。

第一种情况(内联计算)

select round(greatest(col1 - (col2/100)*col1,0),2) as res1, col1, col2 
from 
mytable  

第二种情况

一种。功能:

create or replace function calc(c1 number, c2 number) return number
begin 
   return round(greatest(col1 - (col2/100)*col1,0),2);
exception when others then 
   return 0;      
end;    

b。查询:

select calc(col1,col2) as res1, col1, col2 
from 
mytable  

因为在现实生活中,源表可能很大,并且存在大量更复杂的计算-最好事先知道是否转换查询并使它们更具可读性-对(或不对)总体产生负面影响执行速度。

谢谢。

威廉·罗伯逊

是的,从SQL调用用户定义的函数会产生开销。搜索“上下文切换”。可以使用pragma udf12c或deterministic更早版本(或两者兼有)将其最小化

有关选项及其对性能的影响的一些详细分析,请参阅:

https://oracle-base.com/articles/12c/with-clause-enhancements-12cr1

如果您可能在where子句中使用函数,则还可以考虑优化成本:

http://www.oracle-developer.net/display.php?id=426

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章