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

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/84072059