
我们在操作数据库,循环记录并打印在网页上的时候,通常通过判断 记录游标是否到达最后一条记录之后来决定是否结束循环,以ASP代码为例
while not rst.eof
response.Write("1")
rst.movenext
wend
可以看出,上面的循环体每循环一次都需要做一次 eof 判断。从理论上分析,当有大量记录循环时,应该会给服务器带来较大负担。如果能够避免使用eof的话,是否能够获得更好的效率呢?俗话说:实践出真知。下面进行了一下测试,来比较一下执行速度。
测试环境:ASP 数据库:Access 记录数:3000条
代码分别如下:
第一种方式:采用eof判断
for j=0 to 100
set rst=server.CreateObject("adodb.recordset")
sql="select * from biao"
rst.open sql,conn,1,1
while not rst.eof
response.Write("1")
rst.movenext
wend
rst.close
set rst=nothing
next
第二种方式:采用先获得记录数再循环
for j=0 to 100
set rst=server.CreateObject("adodb.recordset")
sql="select * from biao"
rst.open sql,conn,1,1
c=rst.recordcount
for i=1 to c
response.Write("1")
rst.movenext
next
rst.close
set rst=nothing
next
为了能减少误差,在循环体外部分别又循环了50次和100次
以下是测试结果 单位 秒
第一种方式 第二种方式
外部循环50次
03.8125 03.5938
03.7969 03.5313
03.8750 03.5156
03.8438 03.5313
03.8125 03.5313
外部循环100次 外部循环100次
07.5781 07.4531
07.5625 08.1875
07.6563 07.3125
07.5625 06.9844
07.6094 07.0469
07.6719 07.0313
07.6875 06.9531
07.8438 06.9844
根据结果,第二种方式确实执行更快一些,不过对于大多数的企业网站来说,一般产品记录不会超过1000条,在这样的数据量下,这两种方式区别就很小了。
作者:中国信息网网站建设
版权所有,转载请以链接形式注明作者及原始出处。