mongodb使用指南

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

关于索引

  • 原则上对于所有的查询都需要有对应的索引,对于上万条记录的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)

 

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

igoodful@qq.com
原文地址:https://www.cnblogs.com/igoodful/p/14378385.html