【问题标题】:Performance impact of function calls in an SQL Query (About Context Switching)SQL 查询中函数调用的性能影响(关于上下文切换)
【发布时间】:2016-02-18 15:59:40
【问题描述】:
由于 SQL 和 PL/SQL 引擎之间的上下文切换,在 SQL 语句中调用函数是否会对性能产生影响?还是潜在影响取决于调用的函数?
- 调用内置函数:
select dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1) from TABLE_NM;
- 调用 PL/SQL 函数:
创建或替换包 PCK 为
函数doSomething(val varchar2)返回varchar2;
结束 PCK;
从 TABLE_NM 中选择 PCK.doSomething(COLUMN)
函数调用是否存在性能开销?谢谢。
【问题讨论】:
标签:
sql
oracle
plsql
database-performance
context-switching
【解决方案1】:
调用内置函数:
这取决于。但是,大多数原生 SQL 函数和内置函数在低级“C 语言”中编译为单个模块Oracle 内核。例如,CASE 或 UPPER 函数在两个引擎之间不会有任何 上下文切换,因为我说它们在一个模块中。
嗯,有一些内置函数是例外,例如SYSDATE 和USER 等。Thomas Kyte 已经很好地解释了它here。
调用 PL/SQL 函数
PL/SQL 中的SQL 调用,反之亦然,即SQL 中的PL/SQL 调用 需要上下文切换。从 SQL 到 PLSQL 存在调用开销(当 SQL 调用 PLSQL 时,“命中”最为明显——当 SQL 嵌入 PLSQL 时,则不然)。