gpt4 book ai didi

oracle - Pragma inline 没有显示出显着的改进?

转载 作者:行者123 更新时间:2023-12-05 01:28:22 25 4
gpt4 key购买 nike

我已了解 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;
/

现在,如果我在没有 pragma inline 的情况下运行它给了我以下时间
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

关于oracle - Pragma inline 没有显示出显着的改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com