帮帮他吧,一个大数据量的分页问题,谢谢大家了!

duochentao 2003-10-20 11:30:00
大家好,我的朋友现在有一个很严峻的问题要来处理,问题就是他手头上有一个500-600万条记录的数据库表,要通过asp来进行查询,可是动不动就能查出200-300万条记录,查询的速度级慢!!我给他一个分页代码试了试,可是没有什么效果。无法提高查询的速度。
不知道各位高手、大侠有没有什么更好的办法帮他解决这个问题。
我觉得应该有一种方法能让系统只查询每页要显示的记录的数量的方法。也就是说每页要显示100条,那系统就查这100条,如果用户点击下一页这个按钮系统再去差下一个100条记录。同时告诉用户有多少页,当前是多少页。

下面就是我给他的代码,他用了不行。
希望有人能帮他解决一下这个问题。最好有代码!
谢谢了!我在这里先替他谢过了!!!!

<%@ LANGUAGE="VBSCRIPT" %>
<!--#include file="conn.asp"-->
<!--#include file="adovbs.inc"-->
<%
Dim RecordPerPage, absPageNum, TotalPages, absRecordNum, rsTest, StrSQL
'absPageNum - 当前页为第几页
'TotalPages - 总的页数
'absRecordNum - 当前页中某一条记录的序号, 如 1-10

RecordPerPage = 10 '每页显示的记录数

' 取得所输出数据的 当前页码
If Request.ServerVariables("CONTENT_LENGTH") = 0 Then
'若没收到表单递交的数据(如首次加载该页时), 则从第 1 页开始显示
absPageNum = 1
Else
'取出按 按钮 时的页码
absPageNum = CInt(Request.Form("PressPageNum"))
'如按 上一页 则页码 -1, 按 下一页, 则页码 +1
If Request.Form("Submit") = "上一页" Then
absPageNum = absPageNum - 1
ElseIf Request.Form("Submit") = "下一页" Then
absPageNum = absPageNum + 1
End If
End If

' 创建记录集对象
Set rsTest = Server.CreateObject("ADODB.Recordset")

rsTest.CursorLocation = adUseClient '这样设置可减轻数据库负载
rsTest.CursorType = adOpenStatic '游标需要前后移动,不能设为仅向前
rsTest.CacheSize = RecordPerPage '设置这个选项会提高性能

StrSQL = "SELECT * FROM tiaoma where col004='03'"
rsTest.Open StrSQL, Cnn, , , adCmdText

rsTest.PageSize = RecordPerPage '设置每一页的记录数

If Not(rsTest.EOF) Then
rsTest.AbsolutePage = absPageNum
End If

TotalPages = rsTest.PageCount
%>

<% ' 下面部分 输出当前页的数据至浏览器 %>
<Html>
<body>
<table colspan=8 cellpadding=5 border=0>
<tr>
<td align=CENTER bgcolor="#800000" width="109"> <font style="ARIAL NARROW" color="#ffffff" size="2">col001</font></td>
<td align=CENTER width=459 bgcolor="#800000"> <font style="ARIAL NARROW" color="#ffffff" size="2">col002</font></td>
<td align=CENTER bgcolor="#800000" width="109"> <font style="ARIAL NARROW" color="#ffffff" size="2">col003</font></td>
<td align=CENTER width=459 bgcolor="#800000"> <font style="ARIAL NARROW" color="#ffffff" size="2">col004</font></td>
<td align=CENTER bgcolor="#800000" width="109"> <font style="ARIAL NARROW" color="#ffffff" size="2">col005</font></td>
<td align=CENTER width=459 bgcolor="#800000"> <font style="ARIAL NARROW" color="#ffffff" size="2">col006</font></td>
<td align=CENTER bgcolor="#800000" width="109"> <font style="ARIAL NARROW" color="#ffffff" size="2">col007</font></td>
<td align=CENTER width=459 bgcolor="#800000"> <font style="ARIAL NARROW" color="#ffffff" size="2">col008</font></td>
</tr>
<% ' 用循环输出当前页的 10 条数据
For absRecordNum = 1 to rsTest.PageSize
%>
<tr>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col001")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col002")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col003")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col004")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col005")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col006")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col007")%></font></td>
<td bgcolor="f7efde" align=CENTER> <font style="ARIAL NARROW" size="2"><%= rsTest("col008")%></font></td>
</tr>
<%
rsTest.MoveNext
If rsTest.EOF Then
Exit For ' 如果已到记录尾, 退出 - 如最后一页数据不满页时
End If
Next

rsTest.Close : Cnn.Close
Set rsTest = Nothing : Set Cnn = Nothing
%>
</table>

<% ' 下面部分 是两个按钮 "上一页" "下一页" %>
<Form Action = "<%= Request.ServerVariables("SCRIPT_NAME") %>" Method="Post">
<Input Type="Hidden" Name="PressPageNum" Value="<%= absPageNum%>">
<%
If absPageNum > 1 Then '如果当前不是第一页, 则显示上一页按钮 %>
<Input Type="Submit" Name="Submit" Value="上一页">
<% End If
If absPageNum <> TotalPages Then '如果当前页不是最后一页, 则显示下一页按钮%>
<Input Type="Submit" Name="Submit" Value="下一页">
<% End If %>
</Form>
<P><Center> [ 第 <font color="#CC0033"><%= absPageNum %></font> 页,
共 <font color="#CC0033"><%= TotalPages %></font> 页 ] </Center></P>
</BODY>
</HTML>
...全文
55 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoadingThink 2003-10-21
  • 打赏
  • 举报
回复
我这样用可以省资源啊!他不是说速度慢吗!
N1rvana 2003-10-21
  • 打赏
  • 举报
回复
……
我觉得最好还是把那个表分成几个相对小点的表,查询的时候分批查询
qunluo 2003-10-21
  • 打赏
  • 举报
回复
用select top 100 from Utable where 你的条件
来试试!
条件在不同页面都随需要!应该可以了吧!我现在的想法!没试过!
hahawuwu 2003-10-21
  • 打赏
  • 举报
回复
帮着顶一下
dgnApo 2003-10-21
  • 打赏
  • 举报
回复
mark..
duckqiu 2003-10-21
  • 打赏
  • 举报
回复
用SQL里的存储过程吧
whb147 2003-10-21
  • 打赏
  • 举报
回复
其实,我觉得不是查询的问题,应该是显示的问题,在数据库里查询的速度一般很快的,除非是模糊查询,那样可能慢一点。
我试过5000条纪录的,
查询并全部显示,很慢很慢的
全部查询分页显示20条,就跟很快了,一点就出来了。
gq 2003-10-21
  • 打赏
  • 举报
回复
需要几条数据就取几条数据。不多取,字段也一样。
GageCSDN 2003-10-21
  • 打赏
  • 举报
回复
建议用存储过程。
srj911 2003-10-21
  • 打赏
  • 举报
回复
好大的数据库啊
chenxingbai 2003-10-21
  • 打赏
  • 举报
回复
^_^
用的是什么数据库
如果是sqlserver2000 用用存储过程吧 我有一个存储过程分页算法 效率很高的
看看吧
http://www.csdn.net/Develop/Read_Article.asp?Id=21298
有什么不明白的请留言 ^_^
vivisogood 2003-10-21
  • 打赏
  • 举报
回复
beforecount=(trim(request("txt_page"))-1)*iRow
strQuery = "select top 100 * from table_views where id not in (select top " &beforecount& " id from table_views ) order by id desc"

LoadingThink 2003-10-21
  • 打赏
  • 举报
回复
喔,错了!
哎!怎么页可以再这里用啊!哈!!!
就用:select top 100 from Utable where 你的条件
条件在不同页面都随需要!
goldme76 2003-10-20
  • 打赏
  • 举报
回复
我倒有个想法,利用指针定位,rs.absoluteposition
读取100条记录,这个是可以实现的,不用讲了吧,
第一页,指针就不用定位了,从第一条记录开始,读取100条,
第二页,指针定位到101记录,rs.absoluteposition=101,读100条
n页,rs.absoluteposition=(n-1)*100+1
这样做的话,就不能显示,共有多少页,因为要得到总页数,必须一开始就把数据库读完,
我觉这种方法可以试试

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧