关于索引的Mongoose查询慢

时间:2017-08-03 03:48:41

标签: node.js mongoose mongodb-query

我有一个经常被我认为很慢的查询。它在我查询的每个数据点都有索引,但没有复合索引。

查询类似于:

ExternalLead.find({
    'price': {$gte:3, $lt:6}, 
    "campaign.id":"an id", 
    createdOn: {$gte: new Date(moment().subtract(10, 'days')), 
                $lte: new Date(moment().subtract(5, 'min'))
    }}).limit(10).sort({_id:-1}).select('_id').exec(function(err, docs){
    if (err) console.log(err);
    var st = new Date();
    console.log(st - s);
});

简单查询,该查询删除价格大约有50k条记录。价格被编入索引,我100%肯定。我已经通过多种方式验证了它。如果我删除价格,此查询将在大约200毫秒内完成,价格大约需要20秒。我测试了多个价格范围,它扫描的前10个应该匹配。这个查询有什么东西没有使用索引吗?

此外,服务器大约是此数据库现在需要的3倍,它不是服务器问题。整个数据库都加载到ram。

节点6.11.2, 猫鼬:4.10.8, mongodb-core:2.1.1 MongoDb:3.4

1 个答案:

答案 0 :(得分:1)

原来我们需要一个价格的复合指数和createdOn。