2017-08-03 53 views
0

我有一個很頻繁的查詢,我認爲它很慢。它對我查詢的每個數據點都有索引,但沒有複合索引。指數緩慢的貓鼬查詢

查詢看起來像:

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); 
}); 

簡單的查詢,有大約50,000記錄該查詢去除的價格。價格被索引,我100%確定。我已通過多種方式進行驗證。如果我刪除價格,這個查詢在大約200ms內完成,價格大約需要20秒。我已經測試了多個價格範圍,它掃描的前10個應該是一個匹配。有沒有關於這個查詢的東西,它不使用索引?

此外,服務器大約是此數據庫現在需要的3倍,這不是服務器問題。整個數據庫被加載到內存中。

節點6.11.2, 貓鼬:4.10.8, MongoDB的核心:2.1.1 的MongoDB:3.4

回答

1

原來我們需要的價格和createdOn一個複合索引。