抽取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 ("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)就表示记录集第一行的第二字段值

数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

另外,关于GetRows()的详细介绍和用法,这里有份内容参考

http://www.51windows.net/pages/Ado/mdmthgetrows.htm

http://www.blueidea.com/tech/program/2005/2853.asp

时间: 2024-09-15 09:01:34

抽取10万条数据,想起GetRows()_应用技巧的相关文章

用存储过程、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 * fro

抽取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

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

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

极限挑战—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内存的服务器.感兴趣的朋友可以下载源代码自己

3分钟如何向MySQL数据库中插入100万条数据

一.编写测试案例向MySQL数据库中插入百万条数据.测试数据表建表脚本如下:use db_xk; drop table if exists tb_test2; create table tb_test2 ( id int primary key auto_increment, subject varchar(50) not null, description varchar(200) not null, teacher_id int(10) zerofill not null, student_