【原创】游标循环loop,while和for…

利用游标循环取大量数据时,性能显得十分重要,现在对三种循环进行一下性能的比较:

一、测试环境配置:

硬件   HP笔记本 intel core(TM)2  主频2.0GHz  3G内存   win7操作系统

工具    PL/SQL

数据库  oracle   

-----------------------------------------------------------------------------

我的数据库中sb_kpxx表中含有103,521,479条数据,已经到达了亿的级别,所以可以拿来测试。测试时通过设置rownum参数,可以进行不同数量级的性能测试,由于时间关系,这里仅进行万,十万,百万级的测试。

二、测试代码如下:

--测试代码仅对取数据进行测试,并未进行数据操作!

--loop方式

set serveroutput on;
declare
          v_num  varchar2(100);
          cursor c_num  is  select sb_num from super.sb_kpxx where rownum < 60000;
    begin
      DBMS_OUTPUT.enable(800000);
        Open  c_num;
        Loop
            Fetch c_num into v_num;
            exit when c_num%notfound;--未找到数据时退出(即到达记录末尾)。
        End Loop;
        Close c_num;
    end;
/

 --while方式

 declare
          v_num    varchar2(100);
          cursor c_num  is  select sb_num from super.sb_kpxx where rownum < 60000;
    begin
        Open  c_num;
         Fetch c_num into v_num;
          While c_num%Found--能找到数据则执行循环内语句。
          Loop
          Fetch  c_num  into v_num;
          End Loop;
        Close c_num;
    end;
    

--for方式

set serveroutput on;
 declare
         v_num varchar2(100);
        cursor c_num is select sb_num from super.sb_kpxx where rownum < 60000;
    begin
          DBMS_OUTPUT.ENABLE (800000);
         for cur in c_num--cur是固定自带的。
         loop
         v_num := cur.sb_num;
         end loop;
    end;
/

三、测试结果

这里各个级别均进行了5次测试,取平均值后填入下表:

级别

loop

while 

for 

万级  (6万)

0.59

0.646

0.059

十万级  (60万)

5.519

5.8

0.443

百万级  (600万)

55.047

55.817

4.348

千万级  (6000万)

未测

未测

71.729

单位:秒

四、结论:

从表中可以看出无论哪个级别,for循环的效率都是远远高出loop和while方式的,而loop和while则相差不大:

1.从消耗时间的数量级来看,loop和while均在同一个数据量级上,而for则比它们要第一个数量级。

2.当数据量到达百万级别时,loop和while已经快接近分的级别了,for仍在秒一级,直到千万级时才到达分的级别。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值