【问题标题】:Why is MongoDB not using the right index?为什么 MongoDB 没有使用正确的索引?
【发布时间】:2013-04-29 04:51:08
【问题描述】:

我有一个正在尝试优化的 MongoDB 查询。我创建了一个与查询中的字段匹配的索引,但我似乎无法让 MongoDB 的查询计划器在没有显式 hint() 的情况下使用该索引,即使 nscanned 和 millis 更适合提示版本。

这里是索引、查询(有和没有提示)和详细解释:

http://paste.roguecoders.com/p/4face5649612e840da04c5fea0491c9b.txt

还有一点信息:这个索引在一个大型集合中,在一个副本集中,所以我使用offline method 构建了索引。它现在存在于所有节点中。

(原贴于MongoDB-User。)

【问题讨论】:

  • 如果你做了索引:owner_1_date_-1_from_backup_1?
  • 我的索引是对的。我正在对date 进行排序。 (hint() 证实它更好。)在我们的生产数据集上索引这个集合也需要一个多小时,所以我不愿意在没有充分理由的情况下尝试。 (-:
  • 这个链接可以解释为什么你会得到scanAndOrderblog.mongolab.com/2012/06/cardinal-ins 它也可以解释为什么 MongoDb 没有看到你创建的索引是最优的
  • 您使用的是哪个版本的 MongoDB?另外,您能否包含您的索引统计信息?
  • @Sammaye 它可能确实与scanAndOrder 有关。感谢您对此的提醒。我会戳它。

标签: mongodb


【解决方案1】:

这似乎是 2.4 中的回归,当 {$in:[ ]} 子句中的一个值为“null”时,它会影响 SERVER-5063 修复。我将其提交为新票 https://jira.mongodb.org/browse/SERVER-9495,我希望它会尽快被分类和修复。

同时,根据为什么会有空值(或没有字段?)以及真/假,您有几个选项,其中一些涉及更改查询,一些涉及更改数据。我不建议仅仅为此降级到 2.2,但这也是一种可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多