具体实现中,根据所用数据库、数据量、实现分页方式,选择分页实现快的方式实现。 一、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 ( select * from tablename) a) 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})