Mongodb Mongo选择了错误的索引

Mongodb Mongo选择了错误的索引,mongodb,Mongodb,我使用的是mongo db 2.6.9。 我在一个集合上创建了两个索引,我不理解查询规划器总是选择错误索引的原因 我想知道我错过了什么 第一个索引: { "TimeStamp":1, "A":1, "B":1, } 第二项指标: { "TimeStamp":1, "A":1, "C":1, } 当我使用以下查询时,planner会选择第一个索引: db.collection.find({"TimeStamp":{ "$gte" : ISODate("201

我使用的是mongo db 2.6.9。 我在一个集合上创建了两个索引,我不理解查询规划器总是选择错误索引的原因

我想知道我错过了什么

第一个索引:

{
   "TimeStamp":1,
   "A":1,
   "B":1,
}
第二项指标:

{
   "TimeStamp":1,
   "A":1,
   "C":1,
}
当我使用以下查询时,planner会选择第一个索引:

db.collection.find({"TimeStamp":{ "$gte" : ISODate("2015-04-14T00:00:00Z"), "$lt" : ISODate("2015-04-15T00:00:00Z") },"C":2137,"A":1}).explain()
解释({verbose:1})结果:


}这是因为在这种情况下,索引字段的顺序很重要。尝试交换A和C:

db.collection.find({"TimeStamp":{ "$gte" : ISODate("2015-04-14T00:00:00Z"), "$lt" : ISODate("2015-04-15T00:00:00Z") },"A":1,"C":2137}).explain()

也许你可以发布解释的输出。。。或者更好(
explain({verbose:1})
);-)也许可以查看
hint()
?用解释更新了帖子({verbose:1}MongoDB根据经验选择索引-简化,它将索引相互竞争,看谁可以访问100个文档(或所有结果)首先,多个索引可以通过扫描零个文档来完成查询,因此经验测试和索引选择毫无意义。请使用大量数据进行尝试。
db.collection.find({"TimeStamp":{ "$gte" : ISODate("2015-04-14T00:00:00Z"), "$lt" : ISODate("2015-04-15T00:00:00Z") },"A":1,"C":2137}).explain()