【分享】“无限流”分页2.1__单表>=百万级数据库分页应用

伟大de虫子 2004-09-14 05:38:46

◆演示地址:http://www.imagecity.org/myasp/UGP_list.asp

◆源码下载:http://www.imagecity.org/myasp/UGP_list.rar
 该压缩包中包含有111万条记录的数据库,以方便测试使用。解压后200多M


◆更新说明:
  去年曾在这里发表过1.0版,不过当时刚做出来,所以整体比较粗造,现在这个版本修改比较完善,所以再次发表出来,希望有兴趣研究的朋友提供意见交流。
  1、代码重写,使用类对全部ASP代码进行封装,将结果集输出JS代码,使显示页面引用非常简单,ASP非常少(只需要在引用页面一开始引用该类即可)
  2、优化了跳转功能的代码,虽然一次性跳转的速度没有加快,但连续跳转的速度非常快,并且基本保持速度不变。
  3、增加了精确搜索和模糊搜索功能,精确搜索的速度就肯定是很快了,但模糊搜索的速度仍没想到较好的方法来提高速度,这个只能待下一个版本来完善。测试地址限制了模糊搜索的使用,为的防止多人测试的时候服务器负荷过重。
  4、优化了显示界面的JS代码,使代码简短。
  5、使用了较多注释,令使用者容易看懂。


◆特点:
  1、分页占用系统资源极少
  2、分页速度极快且无论数据库是百万级还是千万级速度都不变
  3、跳转页面也非常快


◆注意:
  问题1、在本人机器上测试时,一次跳转1万页、2万页、3万页甚至4万页都没有问题,速度都在800ms以下,但一次跳转5万页时(数据库记录不够,没测试过更多),程序却突然无法响应,出现超时,对这个问题百思不得其解,因为一次跳转4万页才700ms左右,加多1万页理论上是绝对没有问题的,结果却出现了问题,不知道是不是机器的问题,谁知道原因望告之~~~无限感激!否则只好待有空再修理这个问题。
  因为上述的问题,所以才对跳页进行了限制,一次跳转不能超过2万页,想想也无妨,实际应用中极少会跳转到这么后,就算需要,也可以使用连续跳转来达到目的(即:先跳到20000、再跳到40000、再跳到50000……)

  问题2、就是模糊搜索的速度了,模糊搜索的速度相比起正常的分页速度慢得可怜,目前还没想到比较好且简便的方法来解决,若大家能提供意见~~~无限KISS感激~~

  问题3、肯定会有人说使用其他字段进行排序的问题,解决方法很简单,将要排序的字段设置索引,然后修改类中的相关代码即可。


  最后,希望大家多提宝贵意见!多多回复!共同进步~~ ^<@@>^

...全文
1387 104 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
104 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzgpxl 2004-12-14
  • 打赏
  • 举报
回复
Dim JumpPageID, sql, tmpRd
If pr_CurPageNum>pr_TotalPage/2 Then
tmpRd = (pr_TotalPage-pr_CurPageNum)*pr_DefRecord+1
Else
tmpRd = ((pr_CurPageNum)*pr_DefRecord)
End If
If tmpRd<=0 Then tmpRd=20

If pr_CurPageNum>pr_TotalPage/2 Then
If pr_CurPageNum=pr_TotalPage Then
sql = "SELECT Max(ID) FROM (SELECT TOP "&tmpRd&" ID FROM "&pr_TableName&" ORDER BY id DESC) As tmpID"
Else
sql = "SELECT Min(ID) FROM (SELECT TOP "&tmpRd&" ID FROM "&pr_TableName&" ORDER BY id DESC) As tmpID"
End If
Else
sql = "SELECT Max(ID) FROM (SELECT TOP "&tmpRd&" ID FROM "&pr_TableName&" ORDER BY id) As tmpID"
End If

楼主这段代码似乎有点问题。。。是否可以考虑一下
tzgpxl 2004-12-14
  • 打赏
  • 举报
回复
楼主的思路是好的。希望获得某页的开始ID和结束ID。这样来提高速度。

但是楼主获取ID的方法似乎并不通用。而且只是在某些场合下才能使用。楼主可否再思考一下?

我为这个算法头疼了很久了

通常的select top n from table where id not in (select top (nPage-1)*nPageSize from table order by id) order by id。我觉得根本没法满足需求

这种方法还是会存在一次select top N from table 如果页数为5000。那搜索还是很慢。效率也基本上没有提高。。。。。。郁闷中!楼主可以看看吗?

再给楼主一个建议。你的代码封装得很好。但是还应该将ID的字段也封装进去就好了。。。。。。。
tzgpxl 2004-12-14
  • 打赏
  • 举报
回复
楼主的代码我也详细分析了一下。。。。

不知道楼主对间断的ID的处理是怎么进行的~~~~~~~~~~~~~~~~~~~~~~~

现在数据库中是1---1110000 ID不间断。
如果数据库中间出现间断,那么数据搜索的结果就是错误的。
prcgolf 2004-11-26
  • 打赏
  • 举报
回复
up
to_be_or_not_to_be 2004-11-24
  • 打赏
  • 举报
回复
不错,跟我的思路一样,关键的一句就是
select top n * from *** where id not in (select top m id from ***)
开始我找count(*)直接用select count(*)来找,没想到sql server里面还有个sysindex表记录count,这样一来就快多了
mrshelly 2004-11-24
  • 打赏
  • 举报
回复
分页为什么要同数据库扯上关系???

晕晕晕~~~~
铁拳 2004-11-24
  • 打赏
  • 举报
回复
to hubinasm(火星撞地球之闭关修炼): 谢谢你提的改进意见! :)
valu 2004-11-24
  • 打赏
  • 举报
回复
代码太多
铁拳 2004-11-23
  • 打赏
  • 举报
回复
看看偶写的这个能满足各位需要么?
http://blog.csdn.net/sun_jianhua/archive/2004/07/04/33574.aspx
hubinasm 2004-11-23
  • 打赏
  • 举报
回复
to:Sun_Jianhua(铁拳)
就是用这个啊 呵呵


SQL Server 存储过程的分页方案比拼:
http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx
kangway 2004-11-09
  • 打赏
  • 举报
回复
楼主分页还有最大两个疾病:
1. 跳转的分页设计的不好,现在都用Baidu或Google的那种分页,直观方便!
2. 不能显示所查询的总数量!

现在我也正被这个两个问题困扰,不过第一个都差不多了,第二个要显示总数需耗费相当的时间,现在我正考虑建立分词索引的办法.有机会交流!
apollosun 2004-11-05
  • 打赏
  • 举报
回复
good
飘动的风 2004-10-30
  • 打赏
  • 举报
回复
学习,期待access版
zlj113 2004-10-30
  • 打赏
  • 举报
回复
先标记下,到公司后再下:)
dwowbaaa 2004-10-30
  • 打赏
  • 举报
回复
要了
yaohai 2004-10-30
  • 打赏
  • 举报
回复
忒NB了贝,收藏学习......
ljupin 2004-10-30
  • 打赏
  • 举报
回复
晕了
dragonlyf 2004-10-30
  • 打赏
  • 举报
回复
强 学
7teeth 2004-09-24
  • 打赏
  • 举报
回复
学习一下
xiaoxingchi 2004-09-24
  • 打赏
  • 举报
回复
我是SQLServer菜鸟,学习楼主的精神!
加载更多回复(84)

28,409

社区成员

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

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