MongoDB查询优化

项目场景:Mongo在首次查询特慢,后面就好的。如果长时间不查询,下次开始的第一次又将非常慢,于是从链接当时多方面,排查最终发现还是mongo索引建的有问题。

MongoDB在大批量数据查询时经常会遇到查询耗时长,通常情况采用建各种索引来优化。

首先第一步排查,可以在查询后使用.explain()来查看查询数据轨迹,便于分析每个分片的查询索引。

db.Collection.find({}).explain()

查看索引,如果不位可以根据查询条件,新建索引。

1.查询索引

db.COLLECTION_NAME.getIndexes()

2.新建索引

db.COLLECTION_NAME.ensureIndex(keys[options])

此命令支持分片创建索引

  • keys,要建立索引的参数列表。如:{KEY:1},其中key表示字段名,1表示升序排序,也可使用使用数字-1降序。
  • options,可选参数,表示建立索引的设置。可选值如下:
    • background,Boolean,在后台建立索引,以便建立索引时不阻止其他数据库活动。默认值 false。
    • unique,Boolean,创建唯一索引。默认值 false。
    • name,String,指定索引的名称。如果未指定,MongoDB会生成一个索引字段的名称和排序顺序串联。
    • dropDups,Boolean,创建唯一索引时,如果出现重复删除后续出现的相同索引,只保留第一个。
    • sparse,Boolean,对文档中不存在的字段数据不启用索引。默认值是 false。
    • v,index version,索引的版本号。
    • weights,document,索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。

3.重新创建索引

如果发现索引不合适就重新创建

db.COLLECTION_NAME.reIndex()

4.删除索引

db.COLLECTION_NAME.dropIndex("INDEX-NAME")
原文地址:https://www.cnblogs.com/loyung/p/9473584.html