标题:10万条数据分页显示速度优化问题???
只看楼主
编程交流
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-25
 问题点数:0 回复次数:13 
10万条数据分页显示速度优化问题???
我用的是ASP+MSSQL 当前数据库里有10多万记录
要能使记录以最快速度分页显示出来,请问哪位高手有好方法???
搜索更多相关主题的帖子: 数据库 速度 ASP MSSQL 
2007-04-25 11:47
feifeiaini1
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-11-13
得分:0 
用ASP+JS+XML实现不刷新页面分页`````

``应该比较快把```
2007-04-25 11:52
gdk2006
Rank: 4
等 级:业余侠客
威 望:8
帖 子:928
专家分:270
注 册:2006-7-2
得分:0 

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

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

  耗时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

  %>

以下是引用片段:
<%
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
%>

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

  GetRows()方法是将数据从 Recordset 复制到二维数组中,这是一个二维数组,第一个下标标识字段,第二个则标识记录号

  所以rsArray = rs.GetRows()

  rsArray(0, 0)就表示记录集第一行的第一字段值

  rsArray(1, 0)就表示记录集第一行的第二字段值

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


程序员的悲哀如何找女朋友?
追女解决方案百度“让她着迷”!
2007-04-25 12:00
编程交流
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-25
得分:0 
第3种方法:耗时187.500毫秒,总测试平均值在0.2秒左右
GetRows()方法不错,能加上分页显示吗,那就更好了,请推荐下更好的分页代码显示
2007-04-25 12:25
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
得分:0 
Select TOP "&amp; PageSize &amp;" * From [table] where Id &gt; (select Max(Id) from (select top " &amp; ((PageSize * (CurrentPage - 1)) + 1) &amp; " Id from [table] order by Id) As tmp)) order by Id

专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-04-25 12:45
编程交流
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-25
得分:0 

版主推荐的是啥呢

2007-04-25 12:52
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
得分:0 

分页的一个算法,主要是优化SQL查询语句,最底限度降低查询数据的记录量


专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-04-25 12:57
编程交流
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-25
得分:0 
版主能否发个现成的全部代码出来
2007-04-25 13:20
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
得分:0 

<%
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 TOP "& PageSize &" * From [table] where Id >= (select Max(Id) from (select top " & ((PageSize * (CurrentPage - 1)) + 1) & " Id from [table] order by Id) As tmp)) order by Id"
rs.Open sql,conn,1,1

Do While Not rs.EOF
Response.write rs("id")&" | "
rs.MoveNext
Loop
''参数说明:
''PageSize:每页需要显示的记录数
''CurrentPage:当前页码
%>


专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-04-25 13:27
sfzheng2007
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-30
得分:0 
请问使用GetRows()方法 是如何翻页的?

而这种
Select TOP "& PageSize &" * From [table] where Id > (select Max(Id) from (select top " & ((PageSize * (CurrentPage - 1)) + 1) & " Id from [table] order by Id) As tmp)) order by Id
查询方法 该如何写它 首页 上一页 下一页 尾页 ???
2007-04-25 14:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-134801-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.281242 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved