具体实现中,根据所用数据库、数据量、实现分页方式,选择分页实现快的方式实现。

一、MYSQL分页查询方法

      MYSQL分页查询主要使用其自带的limit函数,但需根据查询量来决定具体的使用方式,如只有几千或几万数据,则直接用 limit m,n方式,

      如数据量较多,则要注意limit的使用方式。

// limit m , n:从第 m 条数据开始,获取 n 条数据

     1、数据量少的方式:select * from tablename limit m,n;

// limit m , n:m 可省略,省略或默认从结果集的第 0 条 开始

     2、数据量多的方式:

// 从490000开始取10条
            a.  select * from tablename where id>=(select id from tablename limit 490000,1) limit 10 ; 
            b.  select * from tablename limit 490000,10 ;
          a 方式要比 b方式快

二、DB2分页查询方法

      DB2分页查询方法主要以 rownumber() over() 函数方式实现,如下:

select * from(select 字段1,字段2...rownumber() over(order by id desc) as rn from tablename where...) as t1
      where t1.rn between m and n / t1.rn >m and t1.rn <= n;

三、ORACLE分页查询方法

     ORACLE分页查询主要以rownum关键字和rownumber() over()函数实现,如下:

     1、rownum关键字--无排序--获取 n 到 m条数据

a. 在查询的第二层通过ROWNUM <= m 来控制最大值,在查询的最外层控制最小值:
     select * from (
                    select a.*, rownum rn from (
                                            select * from tablename) a
                                                      where rownum <= m)
                                                                  where rn >= n
     b.  直接在最外层控制最大值最小值
      select * from (
                    select a.*, rownum rn from (
)
                                                                  where rn between n and m
      //在绝大多数情况下,a方式要比b方式快的多

     2、rownum关键字--需排序--获取 n 到 m条数据

// 错误方式
     select * from
(select t.*,rownum rn from mytable t order by t.id) b
     where b.row_num between n and m
     //错误原因:上面sql会先执行 rownum rn产生行号,再 执行order by 排序,但是最后结果通过rn即行号获取,order by排序不起作用
     // 正确做法:先排序,对排序后的结果生成行号,则根据rn获取结果获取到的是排序后的结果
     //正确方式:再加一层先排序
     select * from 
     (select a.*, rownum rn from (select * from tablename order by id)a)b
     where b.rn between n and m

     3、rownum() over()方式--同db2方式

select * from(select 字段1,字段2...rownumber() over(order by id desc) as rn from tablename where...) as t1
      where t1.rn between m and n / t1.rn >m and t1.rn <= n;

四、SQL SERVER分页查询方法

      sql server 2005及以上版本,可用 rownum() over()方式实现

      不可用rownum() over()方式版本用top关键字方式实现

      select top num * from tablename where ..........

五、MONGODB分页查询方法

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

     用skip方法查询大量数据的时候速度慢

page1 = db.things.find().limit(20)
page2 = db.things.find().skip(20).limit(20)
page3 = db.things.find().skip(40).limit(20)

     find(查询条件),skip(跳过多少条数据),limit(查询多少条数据),sort(排序依据):sort({"age":1})1--正序,-1--反序

 

     MySQL对应mongodb:

MySQL:SELECT * FROM user
       Mongo: db.user.find()
       MySQL:SELECT * FROM user WHERE name = 'starlee'
       Mongo: db.user.find({'name' : 'starlee'})

     插入:

MySQL:INSERT INOT user (`name`, `age`) values ('starlee',25)
     Mongo:db.user.insert({'name' : 'starlee', 'age' : 25})

     删除:

MySQL:DELETE * FROM user
     Mongo:db.user.remove({})
     MySQL:DELETE FROM user WHERE age < 30
     Mongo:db.user.remove({'age' : {$lt : 30}})

     更新:

MySQL:UPDATE user SET `age` = 36 WHERE `name` = 'starlee'
     Mongo:db.user.update({'name' : 'starlee'}, {$set : {'age' : 36}})
     MySQL:UPDATE user SET `age` = `age` + 3 WHERE `name` = 'starlee'
     Mongo:db.user.update({'name' : 'starlee'}, {$inc : {'age' : 3}})
==============others=======================
     MySQL:SELECT COUNT(*) FROM user WHERE `name` = 'starlee'
     Mongo:db.user.find({'name' : 'starlee'}).count()
 
     MySQL:SELECT * FROM user limit 10,20
     Mongo:db.user.find().skip(10).limit(20)
 
     MySQL:SELECT * FROM user WHERE `age` IN (25, 35,45)
     Mongo:db.user.find({'age' : {$in : [25, 35, 45]}})
 
     MySQL:SELECT * FROM user ORDER BY age DESC
     Mongo:db.user.find().sort({'age' : -1})
 
     MySQL:SELECT DISTINCT(name) FROM user WHERE age > 20
     Mongo:db.user.distinct('name', {'age': {$lt : 20}})
 
     MySQL:SELECT name, sum(marks) FROM user GROUP BY name
     Mongo:
      db.user.group({
      key : {'name' : true},
     cond: {'name' : 'foo'},
     reduce: function(obj,prev) { prev.msum += obj.marks; },
     initial: {msum : 0}
    });

     MySQL:
    SELECT name FROM user WHERE age < 20
    Mongo:db.user.find('this.age < 20', {name : 1})