Влияние на производительность вызовов функций в запросе SQL (о переключении контекста)

Есть ли какое-либо влияние на производительность при вызове функций в операторе SQL из-за переключения контекста между механизмами SQL и PL/SQL? Или потенциальное воздействие зависит от вызываемой функции?

  1. Вызов встроенных функций:
 выберите dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1) из TABLE_NM; 
  1. Вызов функций 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).

Другие вопросы по тегам