【发布时间】:2015-04-15 22:53:19
【问题描述】:
我使用的是 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不进行索引交集?
【问题讨论】:
-
收藏有多大?你有没有运行解释(真)?它是否表明考虑了索引交叉计划?
-
集合大小为几 GB。当我写到
allPlans时,我的意思是解释是用true标志执行的。正如我写的那样,我只看到了 mongo 尝试过的两个可能的计划:一个使用_id_1索引,另一个使用b_1索引。或许值得一提:我的 mongo 实例在集群中运行,并且有几个副本。
标签: mongodb