Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MongoDB没有使用正确的索引?_Mongodb - Fatal编程技术网

为什么MongoDB没有使用正确的索引?

为什么MongoDB没有使用正确的索引?,mongodb,Mongodb,我有一个MongoDB查询,我正在尝试优化它。我创建了一个与查询中的字段匹配的索引,但我似乎无法让MongoDB的查询计划器在没有显式的hint()的情况下使用该索引,即使nscanned和milli更适合于暗示版本 以下是索引、查询(有提示和无提示)和详细解释: 另外一点信息:这个索引位于一个大型ish集合中的副本集中,因此我使用。它现在出现在所有节点中 (最初发布于。)这似乎是2.4中的一个回归,当{$in:[]}子句中的一个值为“null”时,它会影响SERVER-5063修复程序。我把

我有一个MongoDB查询,我正在尝试优化它。我创建了一个与查询中的字段匹配的索引,但我似乎无法让MongoDB的查询计划器在没有显式的
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
有关。谢谢你的提醒。我会仔细看看。