频道栏目
读书频道 > 数据库 > Oracle > 收获,不止Oracle
2.3.2.2 绑定变量,摩托速度
2013-04-17 09:05:15     我来说两句
收藏   我要投稿

本文所属图书 > 收获,不止Oracle

在这本书里读者将会跟随作者一同对Oracle数据库的相关知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、优化、设计人员,还是从事Java、C的开发人员。接下来作者再将这部分知识...  立即去当当网订购

此时我们这么想,要是insert into t values (99898)、insert into t values (99762) 等这10万条语句如果都能合并成一种写法,比如用变量代替具体值,成为insert into t values (:X) ,那岂不是这10万条语句可以被HASH成一个SQL_ID值,不就可以做到解析1次,执行10万次了?这就大大减少了解析时间。

这就是数据库的一个典型优化,绑定变量优化!

接下来我们将proc1改进为proc2,具体写法如下:
create or replace procedure proc2
as
begin
    for i in 1 .. 100000
    loop
        execute immediate
      'insert into t values ( :x )' using i;  
  commit;
    end loop;
end;
/
----这里要记得先预先执行一遍,将过程创建起来!

脚本2-33  第1次改进,将proc1改造成有绑定变量的proc2

接下来我们继续执行测试proc2过程(注意表重建的目的是为了公平,测试都在无记录的空表上进行,并且共享池都清空):
SQL> drop table t purge;
表已删除。
SQL> create table t ( x int );
表已创建。
SQL> alter system flush shared_pool;
系统已更改。
SQL> set timing on
已用时间:  00: 00: 00.00
SQL> exec proc2;
PL/SQL 过程已成功完成。
已用时间:  00: 00: 08.41
SQL> select count(*) from t;
  COUNT(*)
-----------------
100000

脚本2-34  第1次改进后8秒完成,单车变摩托

这次我们惊奇地发现,速度从原来的42.87秒缩减为8.41秒,大幅度提升了,每秒插入记录数达到1万多条,大大超过之前的每秒插入2千多条的速度,为什么会这么神奇呢?”梁老师停下来问大家。

“因为语句被绑定变量了,解析次数变少了!”梁老师的话同学们记得很牢。

“很好,那我们一起看看吧,看看有啥变化(如图2-27所示):


 

虽然插入的语句值各不相同,但是都被绑定为:x,所以被HASH成唯一一个HASH值,名称为dxz576128adaw,很明显可以看出解析1次,执行10万次,这就是速度大幅度提升的原因了。

这下大家对这个速度满意了吧。”

小莲这下才发现,原来简单的体系结构后面还真有不少玄机啊,也不只是上堂课梁老师说的加大减少共享池这么简单,小莲觉得今天的课太值了。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.3.2.1 未优化前,单车速度
下一篇:2.3.2.3 静态改写,汽车速度
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站