IT技术江湖   操作系统   安全技术   平面设计   Web开发   数据库   互联网   搜索引擎   网络广告   
引擎技术江湖  BLOG  合作联系
本站
Google
IT技术江湖
首页>数据库>Oracle性能调优> 基于Oracle的高性能动态SQL程序开发
  • IT技术江湖
  • 基于Oracle的高性能动态SQL程序开发
    http://www.hack1st.com 来源: 2008-03-24 阅读: 评论

      技巧一:尽量使用类似的SQL语句,这样Oracle本身通过SGA中的共享池来直接对该SQL语句进行缓存,那么在下一次执行类似语句时就直接调用缓存中已解析过的语句,以此来提高执行效率。

      技巧二:当涉及到集合单元的时候,尽量使用批联编。比如需要对id为100和101的员工的薪水加薪10%,一般情况下应该为如下形式:

      
    declare
    type num_list is varray(20) of number;
    v_id num_list :=num_list(100,101);
    begin
    ...
    for i in v_id.first .. v_id.last loop
    ...
    execute immediate 'update emp
    set =salary*1.2
    where id=:1 '
    using v_id(i);
    end loop;
    end;

      对于上面的处理,当数据量大的时候就会显得比较慢,那么如果采用批联编的话,则整个集合首先一次性的传入到SQL引擎中进行处理,这样比单独处理效率要高的多,进行批联编处理的代码如下:

      
    declare
    type num_list is varray(20) of number;
    v_id num_list :=num_list(100,101);
    begin
    ...
    forall i in v_id.first .. v_id.last loop
    ...
    execute immediate 'update emp
    set =salary*1.2
    where id=:1 '
    using v_id(i);
    end loop;
    end;

      这里是使用forall来进行批联编,这里将批联编处理的情形作一个小结:

      1) 如果一个循环内执行了insert,delete,update等语句引用了集合元素,那么可以将其移动到一个forall语句中。

      2) 如果select into,fetch into 或returning into 子句引用了一个集合,应该使用bulk collect 子句进行合并。

      3) 如有可能,应该使用主机数组来实现在程序和数据库服务器之间传递参数。

      技巧三:使用NOCOPY编译器来提高PL/SQL性能。缺省情况下,out类型和in out类型的参数是由值传递的方式进行的。但是对于大的对象类型或者集合类型的参数传递而言,其希望损耗将是很大的,为了减少损耗,可以采用引用传递的方式,即在进行参数声明的时候引用NOCOPY关键字来说明即可到达这样的效果。比如创建一个过程:

      
    create or replace procedure test(p_object in nocopy square)
    ...
    end;

      其中square为一个大的对象类型。这样只是传递一个地址,而不是传递整个对象了。显然这样的处理也是提高了效率。

      4. 小结

      本文对动态SQL的编译原理、开发过程以及开发技巧的讨论,通过本文的介绍后,相信读者对动态SQL程序开发有了一个总体的认识,为今后深入的工作打下一个良好的基础。

      前面代码部分已经在下列环境中调试成功:

      服务器端:UNIX+ORACLE9.2

      客户端:WINDOWS2000 PRO+TOAD

    上一页 1 2下一页

    上一篇:Oracle性能优化系列讲座之技巧篇  
    下一篇:Oracle数据库及应用程序优化

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与本站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·教你从应用程序来优化Oracle数据库
      ·教你从应用程序来优化Oracle数据库
      ·利用维对象来优化数据仓库的高级技巧
      ·保持Oracle数据优良性能的技巧
      ·Unix环境下的Oracle调优
      ·Oracle性能调优原则
      ·Oracle的优化器(Optimizer)
      ·优化调整Oracle 8i数据库
      ·SQL语句性能调整
      ·有关Oracle数据库中并行处理技术剖析
    最新更新
    • ·利用维对象来优化数据仓库的高级技巧
      ·保持Oracle数据优良性能的技巧
      ·Unix环境下的Oracle调优
      ·Oracle性能调优原则
      ·Oracle的优化器(Optimizer)
      ·优化调整Oracle 8i数据库
      ·SQL语句性能调整
      ·有关Oracle数据库中并行处理技术剖析
      ·清除Oracle中无用索引 改善DML性能
      ·调整Oracle应用系统性能的原则和方法
    文章关注度排行
    ·高速高效 创建物化视图提高查询速度
    ·Oracle数据库最优化参数缩短反应时间
    ·在Oracle 9i里基于函数的仅索引扫描
    ·如何选择Oracle优化器
    ·提高Oracle数据库查询统计速度经验总结
    ·Oracle性能调优原则
    ·Unix环境下的Oracle调优
    ·Oracle的优化器(Optimizer)
    热点推荐
    如何选择Oracle优化器
    如何选择Oracle优化器
    频道推荐
    • ·如何选择Oracle优化器
    本站精华
    如何选择Oracle优化器
    如何选择Orac
    • ·如何选择Oracle优化器
    • | 网站导航 | 联系QQ | 编辑邮箱 | RSS订阅 | 友情链接 | 官方blog
    • 版权所有:IT技术江湖 @2007-2008
    • powered by www.hack1st.com online services. all rights reserved.京ICP备07005766号