SQL 查询中函数调用的性能影响(关于上下文切换)

Performance impact of function calls in an SQL Query (About Context Switching)

由于 SQL 和 PL/SQL 引擎之间的上下文切换,在 SQL 语句中调用函数是否有任何性能影响?还是潜在影响取决于调用的函数?

  1. 调用内置函数:
select dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1) from TABLE_NM;
  1. 正在调用 PL/SQL 函数:
create or replace package PCK as
  function doSomething(val varchar2) return varchar2;
end PCK;

select PCK.doSomething(COLUMN) from TABLE_NM

函数调用是否有性能开销?谢谢

Calling built-in functions:

视情况而定。但是,大多数 原生 SQL 函数 内置函数 都是在低级“C 中编译的language”作为 Oracle 内核 中的单个模块。例如,CASEUPPER 函数在两个引擎之间不会有任何 上下文切换 ,因为我说它们在一个模块中。

嗯,有一些内置函数是例外,比如 SYSDATEUSER 等。Thomas Kyte 已经很好地解释了它 here.

Calling PL/SQL functions

A SQL 调用 PL/SQL,反之亦然,即 PL/SQL 调用 SQL 需要一个 上下文切换 。从 SQL 到 PLSQL 有一个调用开销(当 SQL 调用 PLSQL 时 "hit" 最明显 - 反之则不然, 当 SQL 嵌入 PLSQL).