MongoDB查询花费2分钟来扫描2万条记录

时间:2019-03-05 12:09:04

标签: mongodb performance query-optimization

你好,

我有一个大约有2万个文档的mongodb集合。删除的文档也存储在集合中,这意味着它们是“软”删除的。

现在,我想根据“状态”键查询文档。状态可以是“打开”,“关闭”或“已删除”。我需要状态为“已关闭”的记录

我看到符合我条件的文档数仅为25。但是,扫描的文档(应用索引后)为18k。

因此,我的查询需要大约2分钟的时间来执行,而且很多次都超时了。

我的第一个问题是: 1.在20k个文档上执行查询是否需要那么多时间? 20k不是那么大吗? 2.如果可以的话,有人可以指导我进一步优化查询吗? 我想做的最后一件事是将已删除的记录推送到一个单独的存档集合中。

这是我当前的查询:

**

select 
* 
from Permissions permi
inner join Permissions permi2
      on permi.UserId = permi2.UserId OR permi.UserManager = 'true'
where permi.UserId = 1    
and permi.UBR_CH_DEFAULT = 'True' and permi.UBR_CH_MANAGER = 'True'

**

1 个答案:

答案 0 :(得分:0)

您必须将单个字段索引设为{status: 1}。用复合索引{status: 1, submittedDate: 1}替换索引可以提高性能。如果正确索引,则20k就什么也不是。如果您只有3个状态,请按以下方式替换查询。

db.collectionname.find({status: 'closed',
    'submittedDate': { $gte: new Date("2019-02-01T00:00:00.000Z"), 
            $lte: new Date("2019-02-02T00:00:00.000Z") }})