转MongoDB 使用Skip和limit分页

关于MongoDB 数据分页和排序 limit,skip用户的一些基础语句,介绍MongoDB 数据分页和排序实例方法。

使用Skip和limit可以如下做数据分页:

Code:

  page1 = db.things.find().limit(20)

  page2 = db.things.find().skip(20).limit(20)

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

备注:可用于分页,limit是pageSize,skip是第n-1页*pageSize (n-1表示几  第1,2...页)skip表示跳过  多少条数据,聚合管道的优化。

  1.$sort  +  $skip  +  $limit顺序优化

    如果在执行管道聚合时,如果$sort、$skip、$limit依次出现的话,例如:

    { $sort: { age : -1 } },

    { $skip: 10 },

    { $limit: 5 }

    那么实际执行的顺序为:

{ $sort: { age : -1 } },

    { $limit: 15 },

    { $skip: 10 }

    $limit会提前到$skip前面去执行。

    此时$limit = 优化前$skip+优化前$limit

    这样做的好处有两个:

    1.在经过$limit管道后,管道内的文档数量个数会“提前”减小,这样会节省内存,提高内存利用效率。

    2.$limit提前后,$sort紧邻$limit这样的话,当进行$sort的时候当得到前“$limit”个文档的时候就会停止。

    当数据量很小时,这样做分页完全没有问题。但是当数据量很大时,skip操作会变的很慢,应该避免使用。  

(不止是mongoDb会这样,大部分数据库都是。)可以通过改变查询文档的规则来达到分页效果,避免使用skip来跳过大量的数据。

(通过计算,得到下次查询应该从什么地方开始)

时间: 2024-10-05 10:45:17

转MongoDB 使用Skip和limit分页的相关文章

【Java必修课】图说Stream中的skip()和limit()方法及组合使用

来源:厦门SEO 1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和分页等. 2 skip()方法 见名知义,skip()方法用于跳过前面n个元素,然后再返回新的流,如图所示: 来看看代码: List<Integer> result = Stream.of(1, 2, 3, 4, 5, 6) .skip(4) .collect(Collector

mysql通过“延迟关联”进行limit分页查询优化的一个实例

最近在生产上遇见一个分页查询特别慢的问题,数据量大概有200万的样子,翻到最后一页性能很低,差不多得有4秒的样子才能出来整个页面,需要进行查询优化. 第一步,找到执行慢的sql,如下: SELECT         shotel_id as hotelId, mroom_type_id as mroomTypeId, available_date as availableDate, result_status as resultStatus, create_time as createTime,

mysql limit分页优化

近期一个项目遇到mysql limit分页奇慢无比,查看了数量也就一百万左右,可是查询的一页数据需要两分多钟,sql语句大约是order by limit,网上的优化大概都是在索引,优化子查询这类,都一一试过,速度并没有大的提升. 后来脑洞大开,是不是order by的问题,想想一百万条数据排序应该也是很耗时间的,于是将order by删除了,果然两分半钟竟然缩短到了0.045秒.经过测试如果是单个表的查询,order by 对速度的影响不太明显,当查询和关联和子查询的时候,对速度的影响就显而易

mysql limit分页优化方法分享

MySQL的优化是非常重要的.其他最常用也最需要优化的就是limit.MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自MySQL手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优

正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询

查看表相关命令 - 查看表结构   desc 表名- 查看生成表的SQL   show create table 表名- 查看索引   show index from  表名 使用索引和不使用索引 由于索引是专门用于加速搜索而生,所以加上索引之后,查询效率会快到飞起来. # 有索引 mysql> select * from tb1 where name = 'zhangqiye'; +-----+-------------+---------------------+--------------

MySQL---正确使用索引、limit分页、执行计划、慢日志查询

正确使用索引 数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效.即使建立索引,索引也不会生效: 1 - like '%xx' 2 select * from tb1 where name like '%cn'; 3 - 使用函数 4 select * from tb1 where reverse(name) = 'wupeiqi'; 5 - or 6 select * from tb1 where nid = 1 or e

优化LIMIT分页

在系统中需要分页的操作通常会使用limit加上偏移量的方法实现,同时加上合适的order by 子句.如果有对应的索引,通常效率会不错,否则MySQL需要做大量的文件排序操作. 一个非常令人头疼问题就是当偏移量非常大的时候,例如可能是limit 10000,20这样的查询,这是mysql需要查询10020条然后只返回最后20条,前面的10000条记录都将被舍弃,这样的代价很高.如果所有的页面被访问的频率相同,那么这样的查询平均需要访问半个表的数据.要优化这样的查询,要么实在页面中限制分页的数量,

my sql limit 分页

之前写了个mysql分页.因为没有用过mysql.理解错了它的limit 函数. <pre name="code" class="sql">select * from a limit 5,20 错误理解: 从第 5 行开始.显示到第 20 行. 错误理解: 显示第 5 页.每页 20 行 正确理解: 从第 5 行开始.显示 20 行

Spring MVC通过Pageable对象和PageableDefault注解获取分页信息(MongoDB通过Pageable来操作分页)

说明:Pageable同时也能用于操作MongoDB的分页. PageableSpring Data库中定义的一个接口,该接口是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber.pageSize等). Pageable定义了很多方法,但其核心的信息只有两个:一是分页的信息(page.size),二是排序的信息. 在Spring MVC的请求中只需要在方法的参数中直接定义一个Pageable类型的参数,当Spring发现这个参数时,Spring会自动