command对象与RecordSet对象比较及Command+GetRows实现SQL速度提升

我们可以采用: Command+ GetRows的方法来提升 ASP读取数据库数据效率,如:

        dim sql,rs,cmd,r
        sql = "Select [columns] From [table] Where [cloumns]='something' order by [columns]"
        Set cmd = Server.CreateObject("Adodb.Command")
        cmd.ActiveConnection = conn
        cmd.CommandText = sql
        Set rs = cmd.Execute
        If Not rs.eof then
            r = rs.getRows
        end if
        rs.close
        Set rs = Nothing
        Set cmd = Nothing

因为Command要快过直接Recordset Open,所以我们选择Command

因为GetRows直接将所有查询结果保存到内存,不需要每次Recordset Move,所以我们选择GetRows

以下是关于这几种方式对比的一些数据:

Access数据库保存10W条数据

通过普通的Recordset Open提取:

<%
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
%>

结果如下:

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

==========================================================

通过使用Command方式提取:

<%
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
%>

结果如下:

耗时2,187.500毫秒,总测试平均值在2秒左右

=========================================================

发现,以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)

那么使用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
%>


结果如下:

耗时187.500毫秒,总测试平均值在0.2秒左右

很明显,我们可以很明显的感觉到,在ASP中使用 Command+ GetRows的方法来 读取数据库数据是目前为止所知的具有最高 效率的方式!

扩展阅读:

GetRows 方法

GetRows方法能够将 Recordset 对象中的多个记录存储到内存数组中。

GetRows语法

array = recordset.GetRows( Rows, Start, Fields )

GetRows返回值

返回二维数组。

GetRows参数

Rows    可选,长整型表达式,指定要检索记录数。默认值为 adGetRowsRest (-1)。

Start    可选,字符串长整型,计算得到在 GetRows 操作开始处的记录的书签。也可使用下列 BookmarkEnum 值。

常量 说明 AdBookmarkCurrent 从当前记录开始。 AdBookmarkFirst 从首记录开始。 AdBookmarkLast 从尾记录开始。

Fields   可选,变体型,代表单个字段名、顺序位置、字段名数组或顺序位置号。ADO 仅返回这些字段中的数据。

GetRows使用说明

使用 GetRows 方法可将记录从 Recordset 复制到二维数组中。第一个下标标识字段,第二个则标识记录号。当 GetRows 方法返回数据时数组变量将自动调整到正确大小。

如果不指定 Rows 参数的值,GetRows 方法将自动检索 Recordset 对象中的所有记录。如果请求的记录比可用记录多,则 GetRows 仅返回可用记录数。

如果 Recordset 对象支持书签,则可以通过传送该记录的 Bookmark 属性值,来指定 GetRows 方法将从哪个记录开始检索数据。

如要限制 GetRows 调用返回的字段,则可以在 Fields 参数中传送单个字段名/编号或者字段名/编号数组。

在调用 GetRows 后,下一个未读取的记录成为当前记录,或者如果没有更多的记录,则 EOF 属性设置为 True

希望本文能帮助大家学习到ASP中如何使用GetRows获得更高的数据库读取效率!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值