我想知道内联计算的使用是否与用户定义的函数具有相同的性能,或者该函数会产生更多的开销?
由于更好的可读性,我希望使用第二个变体(带有函数)。
第一种情况(内联计算)
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 udf
12c或deterministic
更早版本(或两者兼有)将其最小化。
有关选项及其对性能的影响的一些详细分析,请参阅:
https://oracle-base.com/articles/12c/with-clause-enhancements-12cr1
如果您可能在where
子句中使用函数,则还可以考虑优化成本:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句