mongodb查询分页优化

转自:https://blog.csdn.net/chunqiuwei/article/details/11669885

项目中需要用mongodb来进行数据测存储和查询,其中涉及到分页:分页的要求如下

1)每页显示10条

由于数据量太大,cursor.count()获取的符合条件的数据量也很大,导致分页得分好几万页,同时在项目中用到了skip加limit的分页方式,使得性能变慢

所以通过讨论使用了一下措施.即要求2

2)最多分5000页,(其实用户也不可能从第一页一页一页的翻到6000页去,一般情况下翻个几十页,查不到自己所要的数据,都会重新输入查询条件来再进行一次筛选)

经过前面的博客讨论,可以知道分页过程中用cursor.count()获取符合条件的条数是很耗时的,在几千万条数据的压力下,基本上点击查询等待时间不是一般的慢.

结合要求2,现在我们的分页思路可以进行一下改动,思路的伪代码如下

1)分页查询语句为:

DBCursor cursor = collection.find(query).skip((currentPage-1) * PAGESIZE).sort(new BasicDBObject("starttime", -1)).limit(PAGESIZE);//PAGESIZE=10

2)既然限制了最大页数,那么可以知道skip的最大值就等于最大页数*每页显示的条数,在这里是10*5000=50000条.那么核心思路也就由此而出

int  count = 0;

if(查询的数量>50000){

count = 5000;

}else{

count =实际的数量

}

通过if条件可知,我们需要做这么一个判断:判断符合条件的数据量的大小是否大于50000

所以,在分页查询语句的后面可以添加这样的一句代码

DBCursor cursor2 = collection.find(query).skip(maxPage * PAGESIZE).limit(1);//maxPage=最大页数,在这里是5000

这句代码思路很简单,就只直接skip跳过50000条数据进行查询,如果能查到结果,就说明查询的数据量大于50000条

所以上面的代码改动如下

int count = 0;

if(cursor2.hasNext()){//说明数据量大于50000

count = 50000;

}else{

count = cursor.count();//在五万条数据以内的情况下,这个速度还是挺快的

}

当然上面的语句也可以写的更优雅一些

int count = cursor2.hasNext()? 50000:cursor.count();

方法有点:

多增加了一条查询语句,进行最大条数的判断,虽然说查询语句增加了,但是结果显示查询效率确实有了很大的提高,因为这些查询通过测试都是毫秒级的.易用性得到提高

方法缺点:

限制了分页的最大页数,使得查询结果显示的不全,一定程序上影响了用户的使用.

转载于:https://www.cnblogs.com/arcticBoiledWater/p/9681153.html

mongodb查询分页优化相关推荐

  1. python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)

    一.explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mon ...

  2. python mongodb查询速度优化_MongoDB+Python非常慢的简单查询

    我有一个开源的能量监视器(http://openenergymonitor.org),它每五秒钟记录一次我家的电力使用情况,所以我认为这是一个完美的应用程序来使用MongoDB.我有一个flaskpy ...

  3. 【MySQL性能优化系列】百万数据limit分页优化

    背景 众所周知,在使用limit分页过程中,随着前端传过来的PageSize越来越大,查询速度会越来越慢.那有什么优化的办法呢? 本文将通过百万数据表进行演示和优化, 欲知详情,请看下文分解. lim ...

  4. mysql limit 越大越慢_mysql 优化之14:php mysql limit 分页优化,页面值越大查询越慢...

    php mysql limit 分页优化,页面越大查询越慢 一.测试前言 当前测试表:nodes_hierarchy目前数据量为20多万 程序分页中我们经常使用的核心sql语句select * fro ...

  5. mysql百万数据 查总数都特别慢_mysql百万级数据分页查询缓慢优化方法

    参考网址1:https://www.cnblogs.com/nightOfStreet/p/9647926.html           -------------修改需求 一.与产品商讨 修改需求 ...

  6. Mysql数据库分页查询及优化

    最近遇到个数据库分页查询问题,mysql数据库分页查询默认是升序查询,就是第一页查询的是最先插入的数据,最后一页才是最新插入的数据,弄了个小的数据库表单,记录下我的操作过程,还有优化查询速度的方法. ...

  7. SpringBoot+MongoDB查询大数据字段优化

    记录一下 SpringBoot+MongoDB查询大数据字段,查询的单个字段或者总查询结果量太大 用 mongoTemplate.find(query, NewSnapshot.class, coll ...

  8. 跨mysql和mongodb查询工具_MySQL与MongoDB查询互转

    Mysql与MongoDB查询互转 mongo查询严格要求数据格式! 1.只想查出某些数据,不想全部数据都查出来 mysql:select name from user; mongo: db.user ...

  9. 转载 - sql分页优化

    当网站达到一定的规模时,网站的各种优化是必须要进行的. 而网站的优化中,针对数据库各种优化是最重点的了. mysql数据库中的查询语句有关limit语句的优化. 一般limit是用在分页的程序的分页上 ...

最新文章

  1. Java 性能优化的 45 个细节
  2. eclipse 工程复制
  3. springMVC通过ajax传递参数list对象或传递数组对象到后台
  4. 25.计算机和计算器的区别
  5. python数值运算答案_笨方法学Python 习题3:数字和数学计算
  6. js.domReady
  7. 聊聊微信的Dark模式
  8. 集群的可扩展性及其分布式体系结构(2)-上
  9. 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
  10. gridview中的图片错乱解决办法
  11. 基于腾讯视频影视作品数据分析
  12. Leetcode——C++突击面试
  13. 数字化转型需要双模IT
  14. 信庭嵌入式工作室-ARM应用技术之体系结构应用(上)
  15. Lftp 支持大文件,断点续传
  16. 集群升级:CBS迁移
  17. c语言大作业之自动寄存柜,关于自动寄存柜的问题求解
  18. 电压型逆变器和电流型逆变器的不同
  19. 19、网络配线架打线工艺
  20. 区块链系统:点对点交易原理

热门文章

  1. linux连接svn上代码,代码管理平台介绍、安装svn、客户端上使用svn(linux)、客户端上使用svn(windows)...
  2. Android日志[基础篇]二 Android Studio修改LogCat日志的颜色
  3. git学习入门~~~
  4. guid主分区表损坏怎么办_抹盘提示进程失败,导致Win 10无法正常开机怎么办?...
  5. python之if经典语句_Python之if语句、字典
  6. linux查看帮助文档的命令,Linux如何使用查看一个命令的帮助文档呢?
  7. arduinojson 转 string_安德胜工作室发来本周五嗨唱转起来第二季首秀的嘉宾剧透...
  8. 土木工程和计算机专硕,第一次发帖 关于大工土木专硕
  9. 《零基础》MySQL 创建数据库(五)
  10. html5svg在线编辑器,SVG to Canvas在线转换工具