oracle – Pragma inline没有显示出明显的改善?
发布时间:2021-01-22 21:30:21 所属栏目:站长百科 来源:网络整理
导读:我已经相识了PRAGMA INLINE 11g成果,但我无法区分它是怎样现实优化我的代码的. 我写了一段代码. create or replace package test12is procedure getdata (p_job IN emp.job%TYPE,p_total OUT number);end test12;/create or replace package body test12is P
|
我已经相识了PRAGMA INLINE 11g成果,但我无法区分它是怎样现实优化我的代码的. 我写了一段代码. create or replace package test12
is
procedure getdata (p_job IN emp.job%TYPE,p_total OUT number);
end test12;
/
create or replace package body test12
is
PROCEDURE total(p_empno IN EMP.EMPNO%TYPE,p_total OUT integer)
IS
BEGIN
select sal into p_total from emp where empno=p_empno;
END total;
procedure getdata (p_job IN emp.job%TYPE,p_total OUT number)
IS
type cur is ref cursor;
v_cur cur;
v_emp emp.empno%TYPE;
v_total integer:=0;
BEGIN
for i in 1..100000
loop
open v_cur for select empno from emp where job=p_job;
loop
fetch v_cur into v_emp;
exit when v_cur%notfound;
--PRAGMA INLINE(total,'YES');
total(v_emp,v_total);
p_total:=p_total+v_total;
end loop;
close v_cur;
end loop;
END getdata;
end test12;
/
declare
v_total integer;
v_start integer;
v_end integer;
begin
v_start:=DBMS_UTILITY.GET_TIME;
test12.getdata('CLERK',v_total);
v_end :=DBMS_UTILITY.GET_TIME;
v_total:=v_end-v_start;
dbms_output.put_line('time is '||v_total);
end;
/
此刻,假如我在没有内联编译的环境下运行它会给我以下时刻 First Run : time is 3573 Second Run: time is 3571 Third Run : time is 3554 此刻,假如我行使pragma inline运行它会给我以下时刻 First Run : time is 3471 Second Run: time is 3489 Third Run : time is 3482 但在这里我没有看到两者之间有任何显著差别.也许是什么缘故起因? 办理要领挪用措施所耗费的时刻险些为0.这里优化的很少.我很惊奇你看到了任何前进. 99.9%的执行时刻也许花在SQL上,而不是PL / SQL上.--Procedure that does almost nothing
create or replace procedure total(p_empno IN number,p_total OUT integer) is
begin
p_total := p_empno + 1;
end;
/
--Disable optimiziations
alter session set PLSQL_OPTIMIZE_LEVEL = 0;
--Only time the procedure calls
declare
v_test_out number;
v_start number;
v_end number;
begin
v_start:=DBMS_UTILITY.GET_TIME;
for i in 1 .. 100000 loop
total(i,v_test_out);
end loop;
v_end :=DBMS_UTILITY.GET_TIME;
dbms_output.put_line('time is '||to_char(v_end-v_start));
end;
/
time is 5
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

