mongo中的索引交集问题

时间:2015-04-15 14:08:13

标签: mongodb

我正在使用mongo 2.6.8并遇到以下问题:

集合users包含索引_id_1b_1。当我执行查询时

db.users.find({"$and": [
     {"b": {"$gt": ISODate("somedate")}}, 
     {"b": {"$lt": ISODate("anotherdate")}},
     {"_id": {"$gt": "somevalue"}}, 
     {"_id": {"$lt": "anothervalue"}},
]})

我希望mongo将执行索引交集并使用相交索引,但它只选择b_1索引。在对此查询执行说明时,allPlans部分甚至不包含相交的索引,只有_id_1b_1

为什么mongo不执行索引交集?

1 个答案:

答案 0 :(得分:1)

我认为这可能是因为您对$gt上相同的索引键($ltb的查询有两个限制({{1} }}))。如果您将查询更改为以下内容,您的解释会发生什么。如果它正在使用交叉点我会是对的:

_id

在这种情况下,对一个索引使用两个限制可能比仅使用两个索引的一个限制并使用交集更快。