让recordset更快
忘了在哪里看过这篇文章了,知道的同学请给个连接,谢谢
商业网站必需能够容纳许多的使用者,服务器不只是硬件方面,应用程序设计上的好坏,也是影响效能最主要的原因。因此,懂的最佳化自己的网络应用程序是个很重要的课题。商业网站最重要的就是数据库,使用ASP与数据库连结不外乎使用到ADO对象,但是,你可能不知道,存取数据库的方法不同,可能会影响到程序执行的效能。
一般来讲,读取数据库内容都是这样做:
'建立Recordset
Set Rs = Server.Createobject("ADODB.Recordset")
Rs.Open "SELECT Number,Name,Text FROM mydata",Conn,3
'取得资料
Response.Write(Rs("Number"))
Response.Write(Rs("Name"))
Response.Write(Rs("Text"))
'释放对象
Rs.Close
Set Rs = Nothing
由于Recordset的方便性,使我们能很容易的控制数据库,如设定分页、指定光标等等,这是最常见的与数据库沟通的办法。我们常使用其中的『Rs(字段名称)』取得某字段内容,但说到处理速度,其实并不很令人满意。事实上,除此外还有其它方法用以取得资料内容,效率也有好有坏,我们接着要一一介绍。
■Recordset(字段名称).Value:使用Field对象的Value属性来取得资料内容。
Response.write(Rs(“栏位名称").value)
■Set var = Recordset(字段名称):先将Field对象用Set方法指定另一名称,再取得其中信息。
Set data = Rs(字段名称)
Response.Write(data)
■ Recordset(字段编号):和『Recordset(字段名称)』一样,只是改编号选定目标字段,编号是依照字段的顺序编排,从 0 开始。
Response.write(Rs(字段名称))
■Recordset(字段编号).Value:与『Recordset(字段编号).Value』相似。
Response.Write(Rs(字段编号).Value)
■ Set var = Recordset(字段编号):与『Set var = Recordset(字段名称)』相似。
Set data = Rs(字段编号)
Response.Write(data)
■ Recordset.GetRows():先将所有资料储存于内存数组之中再行使用。
dataArray = Rs.GetRows()
Response.Write(dataArray(0,0))
诸多的读取字段资料方法,最有效率的是哪一项呢?我们做了以下测试,以这些方法读取数据库1000笔资料做速度的比较,所花费之执行时间越少,相对的就越有效率。我们为了求实验结果较为准确,共分别测试了三次,并取平均值比较,虽然还是不免有误差,但至少较为准确:
据实验所得记录的结果,属Rs.GetRows()的速度最快,其次是Set Rs(字段编号)方法。GetRows()的优势,在于将查询到的资料以数组记录到内存中,并可随即将Recordset关闭释放。因此,当我们要某字段资料时,不需透过Recordset的接口去取得,而直接使用内存数组内的资料,要知道,Recordset是很耗系统资源的,越少使用越好,这方法之所以有效率就是这原因。
使用数组记录所有资料结果固然是最佳方法,但这只限于读取多笔资料时,倘若只有少数几笔资料时,数组法执行效率上便不及Set Rs(字段编号)方法了。原因何在呢?其实使用Recordset接口读取下一笔资料,便要用Re.MoveNext让读取的光标移到下一笔资料所在,这方法要占用系统资源去运算才可达成,比起数组直接呼叫内存,方法当然慢的多。但若只有几笔资料,也仍然要多占内存和CPU去建立数组,再大费周章的将所有数据取出放其中,这样效能还远不如使用几次Rs.MoveNext来达成少数资料的读取。
你可能会发现,只要多用Set就比其它同类方法速度还快。先前讲过,我们要少用到Recordset便可提高速度。我们使用Set将各字段的属性内容,取出放入内存中再行读取,速度当然比直接操作Recordset接口还来的快。
如果您有数据库处理速度上的问题,希望能从本文获得些许助益。