为什么MongoDB没有使用正确的索引?
我有一个MongoDB查询,我正在尝试优化它。我创建了一个与查询中的字段匹配的索引,但我似乎无法让MongoDB的查询计划器在没有显式的为什么MongoDB没有使用正确的索引?,mongodb,Mongodb,我有一个MongoDB查询,我正在尝试优化它。我创建了一个与查询中的字段匹配的索引,但我似乎无法让MongoDB的查询计划器在没有显式的hint()的情况下使用该索引,即使nscanned和milli更适合于暗示版本 以下是索引、查询(有提示和无提示)和详细解释: 另外一点信息:这个索引位于一个大型ish集合中的副本集中,因此我使用。它现在出现在所有节点中 (最初发布于。)这似乎是2.4中的一个回归,当{$in:[]}子句中的一个值为“null”时,它会影响SERVER-5063修复程序。我把
hint()
的情况下使用该索引,即使nscanned
和milli
更适合于暗示版本
以下是索引、查询(有提示和无提示)和详细解释:
另外一点信息:这个索引位于一个大型ish集合中的副本集中,因此我使用。它现在出现在所有节点中
(最初发布于。)这似乎是2.4中的一个回归,当{$in:[]}子句中的一个值为“null”时,它会影响SERVER-5063修复程序。我把它作为一张新的罚单归档,我希望这张罚单能很快被分检和修复
同时,根据存在空值(或缺少字段?)以及true/false的原因,您有几个选项,有些涉及更改查询,有些涉及更改数据。我不建议仅仅为了这个而降级到2.2,但这也是一种可能性。如果你制作了索引:
owner\u 1\u date\u-1\u from\u backup\u 1
?我的索引是正确的。我在日期排序
。(而且hint()
确认它更好。)在我们的生产数据集上为这个集合编制索引也需要一个多小时,所以我不愿意在没有充分理由的情况下就尝试。(:这个链接可能解释了为什么你得到了scanander
,也可能解释了为什么MongoDb没有将你创建的索引视为最佳。你使用的是什么版本的MongoDb?另外,你能包括你的索引统计数据吗?@Sammaye它可能确实与scanander
有关。谢谢你的提醒。我会仔细看看。