由于SQL和PL/SQL引擎之间的上下文切换,调用SQL语句中的函数是否会对性能产生影响?还是潜在的影响取决于调用的函数?
- 调用内置函数:
从TABLE_NM中选择dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1)
- 调用PL/SQL函数:
创建或替换程序包PCK为函数doSomething(val varchar2)返回varchar2;结束PCK;从TABLE_NM中选择PCK.doSomething(COLUMN)
函数调用是否会带来性能开销?谢谢
调用内置函数:
这取决于情况。但是,大多数本机SQL函数和内置函数语言"中编译的,作为Oracle内核中的单个模块。例如,CASE
或UPPER
函数在两个引擎之间不会有任何上下文切换,正如我所说,它们在一个模块中。
嗯,有一些内置函数是例外,比如SYSDATE
和USER
等。Thomas Kyte在这里对其进行了很好的解释。
调用PL/SQL函数
PL/SQL中的SQL调用,反之亦然,即SQL中的
PL/SQL调用需要
上下文切换。从SQL到PLSQL有一个调用开销(当SQL调用PLSQL时,"命中"最明显,而当SQL嵌入PLSQL时则不然)。