31、分页实现——数据库的分页

学习目标:

1、掌握数据库分页算法

2、掌握不同数据库之间分页算法的不同点

学习过程:

今天的另外一个重要内容就是分页显示列表。现在我们在页面上面看到的用户列表都是全部信息,信息量少当然没有问题,但是一般数据里都会几百或者上万条,每次都全部显示是不可能的,所以我们必须分页显示。

分页一般有两种实现方式,其一、先把所有的信息查询出来保存在web服务器中,然后在展示的时候再部分展示。其二、在数据库就做好分页查询,然后展示就只会展示到查询出来的结果。第一种方法对数据库压力比较少,不用每次分页都查询数据库,但是不适合数据量很大的时候,因为一次查询上万数据保存在web服务器中不现实。所以一般我们会使用第二种方式。当然也有一些结合这两种方式的分页,先查询几页的数据,如果需要查询后面的数据时再查询数据库,这样当然是最高效的方法。这里我们学习的是第二种方式,就是先从数据库开始分页查询数据。

麻烦的是不同的数据库的分页查询是不同的,所以我们必须分开进行学习

一、mysql的分页算法

mysql的分页算法最简单,就是使用limit关键字即可。

Mysql的分页sql使用在sql语句末端 + limit (起始位置),查询的数量,

如:select * from table where ... limit 起始位置,查询的数量(pageSize);

比如我们查询前10条的数据,如下面所示:

select * from tb_user limit 0,10

二、sql servlet的分页算法

sql server的分页算法也比较简单,示例如下:

1、分页方案一:(利用Not In和SELECT TOP分页)

如: select top 页大小[pagesize] * from  table where ( id not in(select top 页大小*当前页数 id from table order by  id)) order by id。

2、 分页方案二:(利用ID大于多少和SELECT TOP分页)

     select top 页大小[pagesize] * from table where (id >(select max(id) from (select top 页大小*当前页数 id  from table order by id) as t)) order by id。 

三、oracle的分页算法

oracle分页算法最为复杂,实现方法也很多

1、按ROWNUM来分【三层】

select * from(select t.*,rownum rn from(select * from 【table】 order by 【id】 desc) t where  rownum<=10) where rn>0 

10是终止位,0起始位,rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2。

2、按分析函数来分【两层】

select * from (select t.*,row_number() over(order by cid desc) rk from 【table】t) where rk<10000 and rk>9980;

3、根据ROWID来分【四层】

select * from 【table】where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from 【table】order by cid desc) where rownum<10000) where rn>9980) order by cid desc;

rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。 利用rowid是访问表中一行的最快方式。 

比如使用oracle实现对tb_user的分页查询

select * from(select t.*,rownum rn from(select * from tb_user ) t where  rownum<=10) where rn>0

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值