各种数据库分页查询方法

Beth ·
更新时间:2024-09-20
· 622 次阅读

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



分页查询 方法 数据 数据库 分页

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章
Rachel 2021-05-21
634