什么是分页技术

分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们阅读书籍很类似.
分页的意义
分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内.如果不顾一切的Select * from某个表,再将返回的数据一古脑的扔给客户,即使客户能够忍受成千上万足够让人眼花缭乱的表格式数据,繁忙的网络,紧张的服务器也会提出它们无声的抗议,甚至有时会以彻底的罢工作为终结.这个结局有点像古代为所欲为的暴君和他忍无可忍的臣民之间的故事.
程序员不是暴君,他希望程序使生活变得更好而不是更糟.考虑到企业信息系统多是三层甚至更多层架构的事实,程序员在向客户展示数据时都应该采取分页的形式.如果他不想被抱怨淹没或是半夜被电话惊醒的话.
从请求发起到返回数据的整个过程
现在你已经下定决心想要分页了,在动手书写代码之前,先让我们回想一下,在典型的三层架构中,从请求发起到返回数据的整个过程.如下所示:
在哪里进行分页
从上面的图中我们可以观察得知,在SQL语句处理完毕后,数据库,WebApplication和Browser都能进行分页,那在哪里分页好呢?
判断的标准是速度,显而易见,数据库服务器,Web应用服务器和客户端之间是网络,如果网络传递的数据量越少,则客户端获得响应的速度越快.而且一般来说,数据库服务器和Web应用服务器的处理能力一般比客户端要强很多.从这两点来看,在客户端分页的方案是最不可取的.
其次就剩下了在Web服务器端分页和在数据库端分页两种方式了,如果选择在Web服务器端分页的话,大部分的被过滤掉的数据还是被传输到了Web应用服务器端,与其这样还不如直接在数据库端进行分页.
因此比较好的分页做法应该是每次翻页的时候只从数据库里检索页面大小的块区的数据。这样虽然每次翻页都需要查询数据库,但查询出的记录数很少,网络传输数据量不大,如果使用连接池更可以略过最耗时的建立数据库连接过程。而在数据库端有各种成熟的优化技术用于提高查询速度,比在应用服务器层做缓存有效多了。
分页的SQL语句
如果我们是通过JDBC的方式访问数据库,那么就有必要根据数据库类型采取不同的SQL分页语句,对于MySQL数据库,我们可以采用limit语句进行分页,对于Oracle数据库,我们可以采用rownum的方式进行分页.
(1)MySql的Limit m,n语句
Limit后的两个参数中,参数m是起始下标,它从0开始;参数n是返回的记录数。我们需要分页的话指定这两个值即可
(2)Oracle数据库的rownum
在Oracle数据库中,分页方式没有MySql这样简单,它需要依靠rownum来实现.
Rownum表示一条记录的行号,值得注意的是它在获取每一行后才赋予.因此,想指定rownum的区间来取得分页数据在一层查询语句中是无法做到的,要分页还要进行一次查询.
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# 分页
# 详述 DB2 分页查询及 Java 实现的示例
# Java分页查询--分页显示(实例讲解)
# Oracle下的Java分页功能_动力节点Java学院整理
# Java实现简单的分页功能
# 浅谈java分页三个类 PageBean ResponseUtil StringUtil
# datatables 带查询条件java服务端分页处理实例
# Java Web中常用的分页组件(Java端实现)
# 一个通用的Java分页基类代码详解
# 第一个
# 翻页
# 我们可以
# 第二个
# 的是
# 客户端
# 这是
# 推到
# 最外层
# 中间层
# 第二层
# 两种
# 得多
# 信息系统
# 行号
# 第三层
# 最小值
# 让人
# 是一种
相关文章:
建站之星如何实现五合一智能建站与营销推广?
如何高效生成建站之星成品网站源码?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
在线教育网站制作平台,山西立德教育官网?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
制作企业网站建设方案,怎样建设一个公司网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
广东企业建站网站优化与SEO营销核心策略指南
无锡营销型网站制作公司,无锡网选车牌流程?
济南网站制作的价格,历城一职专官方网站?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
大连 网站制作,大连天途有线官网?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
建站之星如何快速生成多端适配网站?
建站主机SSH密钥生成步骤及常见问题解答?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
为什么Go需要go mod文件_Go go mod文件作用说明
建站168自助建站系统:快速模板定制与SEO优化指南
上海网站制作开发公司,上海买房比较好的网站有哪些?
如何配置WinSCP新建站点的密钥验证步骤?
网站代码制作软件有哪些,如何生成自己网站的代码?
装修招标网站设计制作流程,装修招标流程?
Python lxml的etree和ElementTree有什么区别
红河网站制作公司,红河事业单位身份证如何上传?
如何在腾讯云服务器快速搭建个人网站?
如何安全更换建站之星模板并保留数据?
如何在Tomcat中配置并部署网站项目?
如何用免费手机建站系统零基础打造专业网站?
高性价比服务器租赁——企业级配置与24小时运维服务
音响网站制作视频教程,隆霸音响官方网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何用腾讯建站主机快速创建免费网站?
已有域名和空间,如何快速搭建网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
电脑免费海报制作网站推荐,招聘海报哪个网站多?
网站设计制作企业有哪些,抖音官网主页怎么设置?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何快速查询网站的真实建站时间?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何快速搭建响应式可视化网站?
如何挑选高效建站主机与优质域名?
家庭服务器如何搭建个人网站?
如何在云主机上快速搭建多站点网站?
建站主机数据库如何配置才能提升网站性能?
代刷网站制作软件,别人代刷火车票靠谱吗?
建站之星logo尺寸如何设置最合适?
*请认真填写需求信息,我们会在24小时内与您取得联系。