PL/SQLで、SQL以外の部分が遅い場合は、NATIVE Compile で改善できます。
- plsql_code_type = INTERPRETED の場合(デフォルト)
alter session set plsql_code_type = INTERPRETED;
create or replace function f return number
is
i simple_integer := 0;
begin
for j in 1..1000000000
loop i := i + 1; end loop;
return i;
end;
/
set timing on;
select f from dual;
- plsql_code_type = NATIVE の場合
alter session set plsql_code_type = NATIVE;
create or replace function f return number
is
i simple_integer := 0;
begin
for j in 1..1000000000
loop i := i + 1; end loop;
return i;
end;
/
set timing on;
select f from dual;
手元の結果はこんなかんじ。
- INTERPRETED の場合
経過: 00:00:10.01
- NATIVE の場合
経過: 00:00:01.87
デメリットは、parse のコストが高いこと。ですが実際にその影響で遅延したようなケースは確認したことないです。
ストアド・プロシージャが多い環境ではとりあえず NATIVE でよいのではないでしょうか。