在做查询记录集的展现时,分页实现是常做的工作了。不同的数据库,分页的实现也不尽相同,这里我们对比Myslq和Oracle来简要说明一下两种常用数据库中的分页实现

1.MySql中的limit关键字

以模糊查询为例子,limit写到where子句的后面

select * from user where name like '%mm%' limit startrow,readsize;

其中值得推敲的是startrow和readsize也就是开始和读取的记录数

这样查询出来的结果集是从startrow行,读取endsize条记录,实际上查询到的结果集是startrow+1到startrow+readsize的结果,这是操作中我们应该注意的,结果集不包括startrow.

2.Oracle中的rownum关键字

select name,email from (select rownum rn ,name ,email  from user  where rownum <endrow) t where t.rn>=sartrow

这样我们就可以得到startrow到endrow结果集,注意结果集合不包括endrow当前行记录,如果条件子句中不是>=startrow,那么查询到的结果集是也不包括startrow当前行记录。

Oracle中主要用到rownum这个伪字段,子查询得到的记录集包括了一个rownum字段,由于Oracle中rownum字段都是从1开始递增的,查询到几条记录就递增到几,所以我们应从后向前截取要查询的记录,并将rownum固定为结果集合的一个字段,然后再使用外层查询就可以以结果集的rownum固定住的字段来利用where子句来操纵记录了。

3.Mongodb中的两种分页方法

mongoDB的分页查询是通过limit(),skip(),sort()这三个函数组合进行分页查询的

下面这个是我的测试数据db.test.find().sort({"age":1}); 

     

ogg for mysql 支持DDL吗_分页


第一种方法
查询第一页的数据:db.test.find().sort({"age":1}).limit(2);

ogg for mysql 支持DDL吗_oracle_02



查询第二页的数据:db.test.find().sort({"age":1}).skip(2).limit(2);

ogg for mysql 支持DDL吗_mongodb_03

查询其他页数以此类推。。。
第二种方法查询第一页的数据:db.test.find().sort({"age":1}).limit(2);

ogg for mysql 支持DDL吗_oracle_02

跟上面的第一种方法一样的。
查询第二页的数据:

ogg for mysql 支持DDL吗_oracle_05

这个是获取第一页最后一条记录的值,然后排除前面的记录,就能获取到新的记录了。
总结来说,如果数据量不是很大的话,可以使用第一种方法,毕竟比较简单,如果数据量比较大的话,使用第二种方法比较好,因为这样就可以不用到skip()这个函数,skip跳过太多的记录,效率有点低