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