由于SQL和PL / SQL引擎之间的上下文切换,在SQL语句中调用函数是否会对性能产生影响?或者潜在的影响取决于所谓的函数?
select dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1) from TABLE_NM;
create or replace package PCK as function doSomething(val varchar2) return varchar2; end PCK; select PCK.doSomething(COLUMN) from TABLE_NM
由于函数调用会导致性能开销吗?感谢。
答案 0 :(得分:2)
调用内置函数:
这取决于。但是,大多数本机SQL函数和内置函数都是在低级“ C语言”中编译为单个模块 Oracle内核。例如,CASE
或UPPER
函数在两个引擎之间不会有任何上下文切换,因为我说它们位于单个模块中。
嗯,有一些内置函数是例外,例如SYSDATE
和USER
等。 Thomas Kyte 已经很好地解释了它here。< / p>
调用PL / SQL函数
PL / SQL中的 SQL调用,反之亦然,即SQL中的 PL / SQL调用需要上下文切换。从SQL到PLSQL有一个调用开销(当SQL调用PLSQL时,“命中”最明显 - 当SQL嵌入PLSQL中时,反之亦然)。