数据分页查询_数据分页方法新思路,速度非常快

更新时间:2017-10-06 来源:软件评测 点击:

【www.hzclsc.cn--软件评测】


            
             
              
               
               
             
            
            



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

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

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

环境:
IIS/SQL Server/Access
表结构:
create table 内容表 (
自动编号 IDENTITY(int, 1,1) not null,
分类编码 varchar(20) null,
标题 varchar(255) NULL,
内容 varchar(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 "这里是建立表格tr标记

for i=0 to rs.fields.Count-1 "遍历记录集字段
call AddCol(rs(i).name) "输出字段名
Next

call endTr

while not rs.eof "循环记录集内容,并输出
call beginTr

for i=0 to rs.fields.Count-1
call AddRow(ASPEncode(rs(i).value))
Next
call endTr
endID = rs("自动编号") "这里保存每次输出的自动编号值
rs.MoveNext
Wend
call TableBottom "到此为止,就简单的将记录集内容全部输出
"这里输出翻页标记,vbaIIF 是自写函数
原型为 function vbaIIF(a,b,c)
if a then
vbaIIF =b
else
vbaIIF =c
end if
end function

上一页的实现是通过脚本调用浏览器的功能 history.back(1) 实现,那么回页时并不需要在服务器端重新生成数据,速度不用考虑了。
在首页的时候,上一页的链接应该是无效的,通过 vbaIIF(isBeginPage,"disabled","") 实现,如果为首页,那么在标记中加入 disabled 属性 ,如果不是首页,则加入history.back(1); 脚本指令,用于回退浏览页。
下一页是传递Page 参数和endID参数,Page 设置为 next 表示为下一页的动作,endID 表示当前记录集的末尾编号,下页将由此分页。

response.Write("〈a href=""#"" onclick=""javascript:" & vbaIIF(isBeginPage,"","history.back(1);") & """ " & vbaIIF(isBeginPage," disabled ","") & "〉上一页〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=next&endID=" & endID & """〉下一页〈/a〉")
else
"这里通过判断记录集是否为空来解决到末尾页还可以继续翻页的问题
if not isBeginPage then
"判断是否为空记录,并且不是起始页,那么生成回退页面的脚本,效果就是进入该页后将自动返回到上页。
response.Write "〈Script language=javascript〉" & vbCrlf
Response.Write "history.back(1);" & vbCrlf
Response.Write "〈/script〉"
Response.End
else "如果是起始页记录就为空,则提示无内容
Response.Write "〈font color=blue〉该类别下无内容〈/font〉"
end if
end If


总结:通过前台脚本,SQL查询技巧,实现高性能的分页程序简单快速

希望同行提出更优秀实时数据分页算法

备注:由于论坛限制了HTML字符,所以关键符号采用了中文大写。

本文来源:http://www.hzclsc.cn/ruanjianzixun/2456.html

为您推荐

[rainway什么意思]Rainway软件下载地址 rainway串流switch软件在哪下载

您的位置:首页 → 单机游戏 → 游戏资讯 → Rainway软件下载地址 rainway串流switch软件在哪下载 Rainway软件下载地址 rainway串流switch软件在哪下载时间:20游戏资讯

2020-12-16 11:04:57  

苹果电脑安全性偏好设置_苹果电脑安全漏洞是什么 苹果电脑安全漏洞无需密码解锁解决办法

就在近日,有用户发现苹果电脑出现了一个重大的安全漏洞,不需要输入密码即可进入系统,但是很多用户都还不知道苹果电脑安全漏洞是什么,好奇的用户马上点击查看苹果电脑安全漏洞无需密码解锁解决办法来防范于未然教你一招

2020-12-10 23:05:05   电脑安全软件   电脑安全证书过期怎么办   顺丰寄电脑安全吗  

【nero】Nelo游戏配置要求高吗 Nelo推荐配置一览

Nelo游戏配置要求高吗?Nelo是一款由虚幻4打造的超快节奏的动作游戏,玩家可以使用四种武器形成各式各样的攻击方式,本文为大家带来Nelo售价和配置要求介绍,下面就一起来看看Nelo推荐配置一览吧。游戏资讯

2020-12-10 11:04:41   nero8中文破解版   nero刻录软件   nero10序列号  

抢红包神器抢最大的_抢红包怎么抢最大的 抢红包助手下载哪个好

时近年末,相信大家的“节目单”上除了与好友聚会叙旧、与客户更加频繁地应酬之外,还有一项必不可少的活动,那就是抢红包。记得木心有首现代诗中是这样写的,“从前的日色变得慢,车马、信件都很慢 ”的软件评测

2020-12-09 17:04:22   抢红包怎么能抢最大的   抢红包最大金额软件  

[wegame修复游戏在哪里]腾讯wegame怎么修复游戏 wegame平台修复游戏教程

您的位置:首页 → 资讯 → 游戏软件 → 腾讯wegame怎么修复游戏 wegame平台修复游戏教程 腾讯wegame怎么修复游戏 wegame平台修复游戏教程时间:2017 10 20 16:00游戏软件

2020-12-04 07:04:50   wegame游戏修复在哪里   wegame如何修复游戏