0
点赞
收藏
分享

微信扫一扫

mongodb使用指南

小猪肥 2022-08-03 阅读 97

##############

 

关于索引

  • 原则上对于所有的查询都需要有对应的索引,对于上万条记录的collection,是一定需要对应的索引;
  • 索引长度限制1024字节(index key limit), 避免对大字符串字段创建索引和作为查询条件(MongoDB4.2有改动)
  • 注意组合索引创建的字段顺序
  • MongoDB组索引的字段顺利很重要,如最左原则,等值在前,范围查询在后, order by等在后
  • 尽量使用覆盖索引(Covered Indexes),只通过索引扫描就可以得到需要的数据,避免读取数据文件
  • 使用Projection来减少返回到客户端的文档内容,减少内存、网络带宽的浪费
  • MongoDB类似MySQL一样可以指定select返回的字段,避免使用select *的方式返回所有字段内容;

游标的使用

  • 一个游标已经遍历完,则会自动关闭,如果没有遍历完,则需要手动调用close()方法
  • 游标默认在服务器上存在10分钟后释放,如果不主动调用close(),会造成不必要的资源浪费
  • 如果不能遍历完一个游标,通常意味着查询条件太宽泛,更应该考虑的问题是如何将条件收紧

处理分页问题 - 避免使用count

  • 尽可能不要计算总页数,特别是数据量大和查询条件不能完全命中索引时
  • 建议只遍历前50条数据,比如: db.coll.find({x:100}).limit(50);
  • 为了计算总页数而进行的count()往往是拖慢页面整体加载速度的原因

处理分页问题 - 巧分页

  • 避免使用skip/limit形式的分页,特别是数据量大的时候
  • 替代方案:使用查询条件+唯一排序条件

    例如:
第一页: db.posts.find({}).sort({_id:1}).limit(20);
第二页: db.posts.find({_id:{$gt< 第一页最后一个_id}}).sort({_id:1}).limit(20)
第三页: db.posts.find({_id:{$gt< 第二页最后一个_id}}).sort({_id:1}).limit(20)

 

 

 

 

 

#######################


举报

相关推荐

0 条评论