plsql本地编译与解释执行性能差异对比

fibonacci函数测试
create or replace function fib(n number)
return number
is
begin
if(n<=2) then
return n;
else
return fib(n-1)+fib(n-2);
end if;
end;
/
1. 解释执行
SQL> select name ,plsql_code_type from user_plsql_object_settings;

NAME                 PLSQL_CODE_TYPE
-------------------- ----------------------------------------
FIB                  INTERPRETED
--清理shared_pool和buffer_cache
SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.

SQL> set timing on;
SQL> set serveroutput on;
SQL> declare
  2  n number;
  3  begin
  4  n := fib(40);
  5  dbms_output.put_line('Result is :'||n);
  6  end;
  7  /
Result is :165580141

PL/SQL procedure successfully completed.

Elapsed: 00:01:40.47

2. 本地编译
SQL> alter function fib compile plsql_code_type=native;

Function altered.

Elapsed: 00:00:00.37
SQL> select name,plsql_code_type from user_plsql_object_settings;

NAME                 PLSQL_CODE_TYPE
-------------------- ----------------------------------------
FIB                  NATIVE
alter system flush shared_pool;
alter system flush buffer_cache;

SQL> declare
  2  n number;
  3  begin
  4  n := fib(40);
  5  dbms_output.put_line('Result is :'||n);
  6  end;
  7  /
Result is :165580141

PL/SQL procedure successfully completed.

Elapsed: 00:00:57.52

性能从1分40秒提升为57秒,差异还是比较大的,如果以计算或判断为主的plsql代码可考虑此类方式优化。

参考:http://otn.itpub.net/17203031/viewspace-777265/
引用自以上链接:编写pl/sql代码的时候,性能是一个非常重要的考量方式。Native程序化在一定程度上可以提高效率。不过应该看到,Native化程序是有条件的。Native PL/SQL节省的时间成本在PL/SQL引擎的层面,而SQL语句引擎方面不会有很大程度的提升。
所以,如果我们的代码中以流程、计算和循环判断为主体,SQL语句相对较少,那么使用Native化是比较“划算”的。反之,如果主要都是在进行SQL语句计算操作,即使我们将代码Native化,获取到的优势也比较少。
另一方面,Native化的程序在迁移、升级的时候,也许会有很多额外的问题和关注点。也是我们需要注意慎用的方面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值