Влияние на производительность вызовов функций в запросе SQL (о переключении контекста)
Есть ли какое-либо влияние на производительность при вызове функций в операторе SQL из-за переключения контекста между механизмами SQL и PL/SQL? Или потенциальное воздействие зависит от вызываемой функции?
- Вызов встроенных функций:
выберите dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1) из TABLE_NM;
- Вызов функций PL/SQL:
создать или заменить пакет PCK как функция doSomething(val varchar2) return varchar2; конец PCK; выберите PCK.doSomething(COLUMN) из TABLE_NM
Есть ли потери производительности из-за вызовов функций? Благодарю.
1 ответ
Вызов встроенных функций:
Это зависит. Но большинство собственных функций SQL и встроенных функций скомпилированы на низкоуровневом "языке C" как единый модуль в ядре Oracle. Например, CASE
или же UPPER
Функция не будет иметь никакого переключателя контекста между двумя движками, как я сказал, они находятся в одном модуле.
Ну, есть некоторые встроенные функции, которые являются исключениями, такими как SYSDATE
а также USER
и т.д. Томас Кайт прекрасно объяснил это здесь.
Вызов функций PL/SQL
Вызов SQL в PL/SQL или наоборот, то есть вызов PL/SQL в SQL, требует переключения контекста. Существуют накладные расходы при переходе от SQL к PLSQL ("хит" наиболее очевиден, когда SQL вызывает PLSQL - не так сильно, когда SQL встроен в PLSQL).