用存储过程、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)就表示记录集第一行的第二字段值
数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

(0)

相关推荐

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

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

  • MySQL如何利用存储过程快速生成100万条数据详解

    1.在测试的时候为了测试大数据量的情况下项目的抗压能力我们通常要创造一些测试数据那么现在这个方法绝对好用 其中可能会有sql空间的报错可以自己尝试解决,这里做了分批插入,每次插入30万条,所以没有遇到类似的空间问题 首先,创建要插入100万数据的表格 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for sdb_b2c_orders -- ----

  • 详解mybatis批量插入10万条数据的优化过程

    数据库 在使用mybatis插入大量数据的时候,为了提高效率,放弃循环插入,改为批量插入,mapper如下: package com.lcy.service.mapper; import com.lcy.service.pojo.TestVO; import org.apache.ibatis.annotations.Insert; import java.util.List; public interface TestMapper { @Insert("") Integer test

  • Js表格万条数据瞬间加载实现代码

    Js表格,万条数据瞬间加载 在Ajax动态加载数据的实际应用中,大家都习惯了一种思维方式:一条数据创建一行. 于是如果数量大的时候,一次性要加载完数据的话,浏览器就会卡上半天 受Flex的DataGrid控件的启发,在Flex的DataGrid控件中,展示数据的方法并不是有多少条数据就创建多少行,它最多只创建你在界面上所看到的十几二十行(假设为n行),如果数据多的话,在滚动过程中,会从数据中抽取你应该看到的这n行数据,重新展示在已经创建好的那n行控件中. 也就是说,Flex的DataGrid控件

  • Python采集猫眼两万条数据 对《无名之辈》影评进行分析

    一.说明 本文主要讲述采集猫眼电影用户评论进行分析,相关爬虫采集程序可以爬取多个电影评论. 运行环境:Win10/Python3.5. 分析工具:jieba.wordcloud.pyecharts.matplotlib. 基本流程:下载内容 ---> 分析获取关键数据 ---> 保存本地文件 ---> 分析本地文件制作图表 注意:本文所有图文和源码仅供学习,请勿他用,转发请注明出处! 本文主要参考:https://mp.weixin.qq.com/s/mTxxkwRZPgBiKC3Sv-

  • mysql查询优化之100万条数据的一张表优化方案

    1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. MyISAM只要简单的读出保存好的行数即可. 注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上where col 条件.其中col列是表的主键之外的其他具有唯一约束索引的列.这样查询时速度会很快.就是可

  • JavaScript如何一次性展示几万条数据

    有一位同事跟大家说他在网上看到一道面试题:"如果后台传给前端几万条数据,前端怎么渲染到页面上?",如何回答? 于是办公室沸腾了, 同事们讨论开了, 你一言我一语说出自己的方案. 有的说直接循环遍历生成html插到页面上:有的说应该用分页来处理:还有的说这个面试官是个白痴, 哪有后台传几万条数据给前端这种情况的:我仔细思考了一下,先不论后端到底会不会白痴到传几万条数据给前端,假如真碰到这种情况,那么如果前端获取到数据以后, 直接将数据转换成html字符串,通过DOM操作插入到页面,势必导

  • 88秒插入1000万条数据到MySQL数据库表的操作方法

    我用到的数据库为,mysql数据库5.7版本的 首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 > 4194304). You can change this value on the server by setting the max_allo

  • 教你如何6秒钟往MySQL插入100万条数据的实现

    一.思路 往MySQL中插入1000000条数据只花了6秒钟! 关键点: 1.使用PreparedStatement对象 2.rewriteBatchedStatements=true 开启批量插入,插入只执行一次,所有插入比较快. 二. 代码 package test0823.demo1; import java.sql.*; /** * @author : Bei-Zhen * @date : 2020-08-24 0:43 */ public class JDBC2 { //static

随机推荐