【原创】游标循环loop,while和for…
2014-03-10 10:09
330 查看
利用游标循环取大量数据时,性能显得十分重要,现在对三种循环进行一下性能的比较:
一、测试环境配置:
硬件 :
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次测试,取平均值后填入下表:
单位:秒
四、结论:
从表中可以看出无论哪个级别,for循环的效率都是远远高出loop和while方式的,而loop和while则相差不大:
1.从消耗时间的数量级来看,loop和while均在同一个数据量级上,而for则比它们要第一个数量级。
2.当数据量到达百万级别时,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仍在秒一级,直到千万级时才到达分的级别。
相关文章推荐
- 游标循环loop,while和for的性能比较
- oracle的控制语句if和循环语句loop while for
- oracle编程 if, for , while, loop, 存储过程,触发器,游标演示
- Oracle中四种循环(GOTO、For、While、Loop)
- python-可变迭代对象在for循环中的风险Risk in FOR loop while looping mutable iterable object
- ORACLE PL/SQL基础 选择(IF CASE) 、 循环(LOOP WHILE FOR)
- Oracle中的三种循环(For、While、Loop)
- Oracle中三种循环(For、While、Loop)案例
- 【DB.PL/SQL】程序流程控制 —— 循环 ——LOOP, END LOOP, WHILE, FOR, CONTINUE
- 16PL_SQL过程之在for和while循环中使用游标
- oracle for loop循环以及游标循环
- PL/SQL语句学习之使用while、loop和for三种循环打印数字的1-10
- Oracle中三种循环(For、While、Loop)
- Oracle中四种循环(GOTO、For、While、Loop)
- 循环和分支结构for/while/loop/switch
- Oracle三种循环(For、While、Loop)实现九九乘法表
- 【MySQL】MySQL PLSQL Demo - 006.循环(WHILE DO and FOR LOOP)
- Oracle中三种循环(For、While、Loop)
- mysql进阶:存储过程中的循环(WHILE DO and FOR LOOP)
- Oracle中四种循环(GOTO、For、While、Loop)