我正在使用mongo 2.6.8并遇到以下问题:
集合users
包含索引_id_1
和b_1
。当我执行查询时
db.users.find({"$and": [
{"b": {"$gt": ISODate("somedate")}},
{"b": {"$lt": ISODate("anotherdate")}},
{"_id": {"$gt": "somevalue"}},
{"_id": {"$lt": "anothervalue"}},
]})
我希望mongo将执行索引交集并使用相交索引,但它只选择b_1
索引。在对此查询执行说明时,allPlans部分甚至不包含相交的索引,只有_id_1
和b_1
。
为什么mongo不执行索引交集?
答案 0 :(得分:1)
我认为这可能是因为您对$gt
上相同的索引键($lt
和b
的查询有两个限制({{1} }}))。如果您将查询更改为以下内容,您的解释会发生什么。如果它正在使用交叉点我会是对的:
_id
在这种情况下,对一个索引使用两个限制可能比仅使用两个索引的一个限制并使用交集更快。