利用游标循环取大量数据时,性能显得十分重要,现在对三种循环进行一下性能的比较:
一、测试环境配置:
硬件
工具
数据库
-----------------------------------------------------------------------------
我的数据库中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仍在秒一级,直到千万级时才到达分的级别。