0%

MongoDB 查询优化思路

  • 给排序字段加索引

需要注意:联合索引里面,一个字段的顺序和逆序是不一样的索引。比如

1
db.coll.createIndex({"a": 1, "b": 1})

1
db.coll.createIndex({"a": 1, "b": -1})

是两个不一样的索引

  • 使用 batchSize 选项批量获取数据

jenssegers mongodb 包默认情况下会获取 101 条记录,然后其他记录在底层通过 iterator_to_array 来获取,如果我们需要获取的数据量比较多,则会需要产生多次获取数据的操作。

所以,如果我们知道需要获取大批量数据的时候,可以指定一个比较大的 batchSize 从而减少网络往返次数。

  • 只获取需要的字段(针对大批量获取数据的情况)

主要目的:减少带宽占用,以及处理过程中可以减少内存占用。

  • 使用覆盖索引

覆盖索引的使用类似 MySQL,因为 MongoDB 的索引也是 B+ 树。如果我们在查询的时候只需要某一两个字段,可以在索引上跟查询条件组合在一起建立一个联合索引。

  • 使用 find 代替 aggregate