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

2016-01-29 18:46 6 1 收藏

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

【 tulaoshi.com - ASP 】

 

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

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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

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

分页:
  那么第一步,就是查询一个页的数据;如果有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_PageSize 笔 (Cnt_PageSize是常量定义,比如20)
      strSQL = "select TOP " & Cnt_pageSize & " 自动编号,标题,内容,时间 from 内容表 where 分类编码= '" & TRIM(SQLEncode(request("flbm"))) & "' order by 自动编号 desc"
    else '如果不是起始页
      if request("Page")="next" then '这里这样写是为了加强代码的表现,如果参数为next ,则表示取下页内容
       '查询=列出分类编码等于参数flbm的记录并且要小于自动编号endID (endID也是参数),并倒序排列,并只列出前 Cnt_PageSize 笔 (Cnt_PageSize是常量定义,比如20)
        strSQL = "select TOP " & Cnt_pageSize & " 自动编号,标题,内容,时间 from 内容表 where 分类编码= '" & TRIM(SQLEncode(request("flbm"))) & "' and 自动编号<" & request("endID") & " order by 自动编号 desc"
      End if
    end if

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

    '打开数据连接执行SQL 并建立记录集
    set rs = Cnn.Execute(strSQL)
    if not rs.Eof then '这里写入判断是否为Eof 可以不要,但是,在这里却有它的特殊意义
      call TableTitle '这里是自写的函数,用于建立表格标记
        call beginTr '

来源:http://www.tulaoshi.com/n/20160129/1507250.html

延伸阅读
标签: autocad教程
关键字: AutoCAD 2009 AutoCAD对象 中望CAD AutoCAD三维造型 AutoCAD造型本文详细介绍AutoCAD教程:新思路再创篮球新画法 我今天又做了一个简单的教程--篮球的画法,不知道是不是要简单一些,希望各位看后提出宝贵的意见和建议,在下愿洗耳恭听,希望我们能够共同学习合同进步! 最终效果图 1、在俯视图下完成图示内容...
标签: PS PS基础
原图 最终效果 一、去色加图层模式法。 1、打开原图素材,把背景图层复制一层。 2、按Ctrl + Shift + U 去色。 3、图层混合模式改为滤色,完成。 二、通道美白法。 1、打开原图素材。 2、按Ctrl + Alt + ~ 调出高光选区,新建一个图层,填充白色,完成。 三、蒙版美白。 1、打开原图素材,双击解锁。 2、新建一个图...
标签: PS
PS抠图新思路:双重蒙版 photoshop抠图有很多种方法,大家熟悉的有通道抠图,路径抠图,外挂抠图及蒙版抠图。今天跟大家分享一下蒙版抠图的新思路。当然这是建立在平面向量蒙版,快速蒙版的基础上进行的,先解释一下双重蒙版,这个方法能让合成的图像看不出破绽。原理如下: 理论就这样,我们实际操作看看吧!在网上搜了张共享素材...
标签: autocad教程
    6、隐藏绿色图层,在红色图层里连接刚刚2此做出的辅助线的交点,用sphere命令做实心球体,以此连接线的中点为球心,123为半径(比第一步中圆的半径小1到2mm)     7、显示所有图层,着色 处理     复制绿色图层和2次的红色辅助线和辅助线交点的连接线到另一位置。 &nbs...
标签: PS PS教程
我这里提下我自己新思路--模式:多通道,这个差不多被人忘记的模式原来也可以修图片  原图 效果 [next] 先打开原图,图像-模式-多通道,在点图片里的通道,如下图 点中洋红通道,CTRL+A,全选,ctrl+c,复制 洋红通道 CTRL+V 粘贴,黄色通道,效果如下 点中洋红/青色/黄色全部的眼睛,感觉有点偏...

经验教程

799

收藏

65
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部