具有复合索引的Mongo查询仍然扫描所有文档

时间:2017-03-01 21:15:01

标签: mongodb mongodb-query

我遇到麻烦让查询在合理的时间内运行。我正在使用的集合是大约1亿个文档。当我运行currentOp()命令检出查询时,它似乎正在扫描所有文档。

db.collection.find({
    "field_1": {"$not": /^Some_Regex/},
    "field_2": "value_1",
    "timestamp_field": {"$gte": ISODate("2016-12-01T00:00:00.000+0000")}
}).sort({"field_1": 1})

我正在传递:

{"field_1": 1, "timestamp_field": -1}

我对复合索引如何工作的理解是它创建了一个表:

field_1     timestamp_field
a           2016-12-03 00:00:00
a           2016-12-02 00:00:00
a           2016-12-01 00:00:00
a           2016-11-30 00:00:00
a           2016-12-29 00:00:00

现在它应该能够筛选出field_1timestamp_field的要求不匹配的任何文档。我希望这个查询只需要扫描最大值,这个查询的结果是:

db.collection.count({
    "field_1": {"$not": /^Regex/},
    "timestamp_field": {"$gte": ISODate("2016-12-01T00:00:00.000+0000")}
}).sort({"field_1": 1})

我应该在三个字段上使用索引吗?我应该使用不同的索引吗? {"field_2": "value_1"}有超过50M的动作,这就是我选择在其他两个领域创建复合索引的原因。

对此查询速度如此之慢的任何帮助都将不胜感激。

0 个答案:

没有答案