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

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

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

【 tulaoshi.com - ASP 】

 

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

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

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

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

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

环境:
  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,
)

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

分页:
  那么第一步,就是查询一个页的数据;如果有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

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

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

延伸阅读
标签: PS PS基础
原图 最终效果 一、去色加图层模式法。 1、打开原图素材,把背景图层复制一层。 2、按Ctrl + Shift + U 去色。 3、图层混合模式改为滤色,完成。 二、通道美白法。 1、打开原图素材。 2、按Ctrl + Alt + ~ 调出高光选区,新建一个图层,填充白色,完成。 三、蒙版美白。 1、打开原图素材,双击解锁。 2、新建一个图...
标签: autocad教程
关键字: AutoCAD 2009 AutoCAD对象 中望CAD AutoCAD三维造型 AutoCAD造型本文详细介绍AutoCAD教程:新思路再创篮球新画法 我今天又做了一个简单的教程--篮球的画法,不知道是不是要简单一些,希望各位看后提出宝贵的意见和建议,在下愿洗耳恭听,希望我们能够共同学习合同进步! 最终效果图 1、在俯视图下完成图示内容...
标签: PS
PS抠图新思路:双重蒙版 photoshop抠图有很多种方法,大家熟悉的有通道抠图,路径抠图,外挂抠图及蒙版抠图。今天跟大家分享一下蒙版抠图的新思路。当然这是建立在平面向量蒙版,快速蒙版的基础上进行的,先解释一下双重蒙版,这个方法能让合成的图像看不出破绽。原理如下: 理论就这样,我们实际操作看看吧!在网上搜了张共享素材...
标签: ASP
  背景: Email地址存于MSSql一用户信息表中,数量上万。 公司自有服务器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多种服务于一身。 JMAIL 有MailMerge对象,但是免费版不能用 要求: 用ASP+JMAIL,利用公司SMTP向所有用户发送EMAIL 思路: 直接读取数据库,多次循环发送,会对本来配置不高的服务器造成很大压力。 最好能对EMAIL分批发送,每...
标签: 暗黑3
《暗黑3》1.03新思路:恶魔猎手回避射击流 1.0.3版本猎魔人的全新思路,回避射击流教学视频。 前半段详细介绍技能与装备搭配,后半段实战回避射击流演示。 碉堡了!《英雄联盟》联赛将支持局域网 在玩家们心里念着《暗黑3》、《星际2》能出局域网版本的时候。《英雄联盟》率先发难,由其幕后开发商Riot Games官方证实,Riot Games的CEOBran...

经验教程

864

收藏

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