利用游标循环取大量数据时,性能显得十分重要,现在对三种循环进行一下性能的比较:
一、测试环境配置:
硬件
工具
数据库
-----------------------------------------------------------------------------
我的数据库中sb_kpxx表中含有103,521,479条数据,已经到达了亿的级别,所以可以拿来测试。测试时通过设置rownum参数,可以进行不同数量级的性能测试,由于时间关系,这里仅进行万,十万,百万级的测试。
二、测试代码如下:
--测试代码仅对取数据进行测试,并未进行数据操作!
--loop方式
set serveroutput on;
declare
/
/
--for方式
set serveroutput on;
/
三、测试结果
这里各个级别均进行了5次测试,取平均值后填入下表:
级别 |
loop |
while |
for |
万级 |
0.59 |
0.646 |
0.059 |
十万级 |
5.519 |
5.8 |
0.443 |
百万级 |
55.047 |
55.817 |
4.348 |
千万级 |
未测 |
未测 |
71.729 |
单位:秒
四、结论:
从表中可以看出无论哪个级别,for循环的效率都是远远高出loop和while方式的,而loop和while则相差不大:
1.从消耗时间的数量级来看,loop和while均在同一个数据量级上,而for则比它们要第一个数量级。
2.当数据量到达百万级别时,loop和while已经快接近分的级别了,for仍在秒一级,直到千万级时才到达分的级别。