【发布时间】:2018-01-10 11:34:12
【问题描述】:
我有一个查询很频繁,我认为它很慢。它对我查询的每个数据点都有索引,但没有复合索引。
查询看起来像:
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 条记录。价格是指数化的,我百分百确定。我已经通过多种方式验证了它。如果我删除价格,这个查询在大约 200 毫秒内完成,价格大约需要 20 秒。我已经测试了多个价格范围,它扫描的前 10 个应该是匹配的。这个查询是否有一些没有使用索引的地方?
另外,服务器大约是这个数据库现在需要的 3 倍,这不是服务器问题。整个数据库被加载到 ram 中。
节点 6.11.2, 猫鼬:4.10.8, MongoDB核心:2.1.1 MongoDb:3.4
【问题讨论】:
标签: node.js mongoose mongodb-query