用存储过程、GetRows()、抽取10万条数据的速度测试_应用技巧

现有10W条数据,Access数据库保存

通过正常提取: 

复制代码 代码如下:

<% 
Set conn= Server.CreateObject("ADODB.Connection") 
c&Server.MapPath("db2.mdb") 
conn.Open connstr 

Set rs = Server.CreateObject ("ADODB.Recordset") 
sql = "Select * from people order by id desc" 
rs.Open sql,conn,1,1 

Do While Not rs.EOF 
    Response.write rs("id")&" | " 
    rs.MoveNext 
Loop 
%> 

 
http://www.cnbruce.com/test/getrows/show1.asp 

耗时3,250.000毫秒,总测试平均值在3秒左右
==========================================================

使用存储过程提取: 

复制代码 代码如下:

<% 
Set conn = Server.CreateObject("ADODB.Connection") 
Set cmd = Server.CreateObject("ADODB.Command") 
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb") 

cmd.ActiveConnection = conn 
cmd.CommandText = "Select * from people order by id desc" 
Set rs = cmd.Execute 

Do While Not rs.EOF 
Response.write rs("id")&" | " 
rs.MoveNext 
Loop 
%> 

 
http://www.cnbruce.com/test/getrows/show2.asp 

耗时2,187.500毫秒,总测试平均值在2秒左右
=========================================================
以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)
那么使用GetRows()方法呢: 

复制代码 代码如下:

<% 
Set conn = Server.CreateObject("ADODB.Connection") 
Set cmd = Server.CreateObject("ADODB.Command") 

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb") 
cmd.ActiveConnection = conn 
cmd.CommandText = "Select * from people order by id desc" 
Set rs = cmd.Execute 
rsArray = rs.GetRows() 

For i = 0 To UBound(rsArray, 2) 
Response.Write rsArray(0, i)&" | " 
Next 
%> 

 
http://www.cnbruce.com/test/getrows/show3.asp 
耗时187.500毫秒,总测试平均值在0.2秒左右
GetRows()方法是将数据从 Recordset 复制到二维数组中,这是一个二维数组,第一个下标标识字段,第二个则标识记录号
所以rsArray = rs.GetRows()
rsArray(0, 0)就表示记录集第一行的第一字段值
rsArray(1, 0)就表示记录集第一行的第二字段值
数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

时间: 2024-09-15 06:08:18

用存储过程、GetRows()、抽取10万条数据的速度测试_应用技巧的相关文章

ASP三种方法抽取10万条数据的速度测试

数据|速度 现有10W条数据,Access数据库保存 通过正常提取: <% Set conn= Server.CreateObject("ADODB.Connection") connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb") conn.Open connstr Set rs = Server.CreateObject

抽取10万条数据,想起GetRows()_应用技巧

现有10W条数据,Access数据库保存 通过正常提取: <%Set conn= Server.CreateObject("ADODB.Connection")connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb")conn.Open connstr Set rs = Server.CreateObject ("A

抽取10万条数据,想起GetRows()

现有10W条数据,Access数据库保存 通过正常提取: <% Set conn= Server.CreateObject("ADODB.Connection") connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb") conn.Open connstr Set rs = Server.CreateObject (&quo

oracle数据库中怎么一次性插入10万条数据

问题描述 oracle数据库中怎么一次性插入10万条数据 oracle数据库中怎么一次性插入10万条数据?急用!!!1 解决方案 最快的方法是用imp进行导入 或者用sql执行也可以(insert into )

mysql 插入10万条数据 优化效率

问题描述 mysql 插入10万条数据 优化效率 public int addTypes(List<taobaoBean> babyList) { String sql = "insert into type (typeid,url) values (?,?) "; Connection conn = dbhelper.getConnection(driver,url,username,upwd); int result = 0; PreparedStatement stm

怎样快速的向SQL-2000里插入10万条数据啊?

问题描述 本人刚参加了一个公司的笔试,有这样一道题,想到了一个笨方法,但速度比较慢,有没有比较快速的方法,向数据库里插入10万条数据?谢谢了... 解决方案 解决方案二:BULKINSERT解决方案三:能不能说的清楚点,还是不明白.解决方案四:在SQL联机帮助里找找看,网上搜索下也行的.解决方案五:有点难度哦

c# 4.0-Parallel.For并行录入10万条数据出错

问题描述 Parallel.For并行录入10万条数据出错 用了一个CodeTimer测试性能,在循环方法体的时候,老大说让用Parallel.For代替for循环. 结果瞬间快了100倍的测试速度,但是又出现一个问题了,数据录不进去了. 经常循环10万次才录入一条,断点调试后发现就第一条录进去了,后面的都是数据库连接池错误. 我想问下用并行之后,这种情况是正常的吗,如果不正常,有什么方法解决呢 代码中的Time()的三个参数,第一个是方法名(无视),第二个是循环次数,第三个是方法体,关于Tim

随机调用n条数据的方法分析_应用技巧

step 一:  sql="select id from table" 结果用存在 rs=conn.execute(sql) step 二: 生成一个 step1的最大值(rs.recordcount)内的随机数字. N个             code:             <%Randomize %>             <%               dim r(10)              for i=0 to UBound(r)       

极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)     实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间.     本实验中所用到工具为VS2008和SQL SERVER 2000.SQL SERVER 2008,分别使用5中方法将100万条数据导入SQL 2000与SQL 2008中,实验环境是DELL 2850双2.0GCPU,2G内存的服务器.感兴趣的朋友可以下载源代码自己