您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp >> 正文

数据分页方法新思路,速度非常快!

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-1-24 我要参与讨论

 

  这篇文章要达到的目的就是,实现大数据分页浏览并最优化速度。

  建立一个web 应用,分页浏览功能必不可少;这个问题也是长久以来最普遍的问题,目前也得到了较好的解决,其中象ASP 程序的分页算法有很多,比如使用ado 对象的PageSize 这些属性,按记录总数计算页,然后跳转记录集再输出;也有编写存储过程实现分页数据,这些方面各有优缺点,以下本人介绍一种应用实际项目中速度非常快的分页算法;

  关键点:SQL (用TOP 和 自动编号 实现)
    页面脚本 (浏览器回退功能)

  环境:
 IIS/SQL Server/Access
  表结构:
create table 内容表 (
自动编号 IDENTITY(int, 1,1) not null,
分类编码 <I>var</I>char(20) null,
  标题 <I>var</I>char(255) NULL,
内容 <I>var</I>char(4000) null,
时间 datetime null,
)

  实现原理:
  这个表设定了自动编号字段,这个字段的特性就是生成不重复的整形,包括删除了记录后该字段仍然保持‘流水性’(注:通常在系统表建设中,这种字段的运用很少,因为编号不能自由管理,但在这里使用它,主要是想在文章中省略编号维护的代码)。

  分页:
  那么第一步,就是查询一个页的数据;如果有100笔记录,按20记录一页,那么通常的分页算法就是“页总数=总记录 除 分页的控制数 [有余数的话,页总数加一]”,这样的做法就导致必须产生所有记录的一个大记录集;从而,又有人提出了用存储过程的分页算法,前者是asp 脚本产生大记录集,这样速度相当慢,后者是杀鸡用牛刀,虽然我经常写存储过程,但根据我的思路会发现写存储过程完全多余。
 
  在SQL 中,许多刚接触它的朋友都知道 Top 修饰关键字的作用;例如:select TOP 1 * from table1 --这样就实现从Table1表返回只有一条记录的记录集那么分页优化的最终目的就是避免产生过大的记录集,通过TOP 即可完全控制;现在查询表应该是 select Top 20 自动编号,标题,内容,时间 from 内容表。
 
  但现在还有个问题,就是如何定位,Top 不可能自动给我们定位输出某个页,这就设计到了where 从句,根据一个特定条件输出正确的内容;注意:记录的 order by 排序是非常重要的,这个决定了这个算法的成败;
 
  这里的演示是DESC 方式,倒序排列,比如网站的软件更新,就是最近的更新放最前面,而这个就是倒序方式。

OK,下面来看看实际代码,首先要确定是否为起始页。


  dim strSQL,i,endID,isBeginPage
  const Cnt_PageSize = 20   '定义每页记录的大小
  '通过检查浏览器传递的Page 参数的值来判断是否为进入下一页的操作
  isBeginPage = isEmpty(request("Page")) or request("Page")="" or request("Page")<>"next" 
  '这里是分页的核心
  if isBeginPage then '如果是起始页
   '查询=列出分类编码等于参数flbm 的记录,按倒序排列,并只列出前 Cnt_PageSiz

[1] [2] [3] 下一页

在google里搜索更多数据分页方法新思路,速度非常快!

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明