0

我收集了这个简单对象的数百万个实例:

{
 Org: string,
 Value: string
}

按字段有一个二级索引[Org],大约有数千个不同的[Org]值。此集合不应更新,因为它一次填写一次。

现在我有一个任务:以自然顺序(它们插入数据库的顺序,即)请求[Value]特定的值,并受特定数量的限制,具有最高性能。我的问题是:[Org]$orderby: _id

  • orderby像,querylimit等运算符的顺序是否会sort影响案例中的性能和执行计划?

  • 是否将在查询中使用两个索引(辅助 by[Org]和默认主 by _id)?

  • MongoDb 是否有任何工具可以跟踪索引使用情况,例如 SQL Server 的查询分析器?

4

1 回答 1

1

您正在寻找explain()查看您的查询如何使用索引。您可以通过返回的“光标”查看您正在使用的索引,并且一些关键统计数据是nscannednscanAndOrdermillis

需要注意的关键一件事是,mongodb 每个查询只能使用一个索引。

是的,排序会影响性能。为了在查询中使用排序,您应该有一个索引,其中包含要排序的字段的索引中的最后一个字段。因此,您可以在 上创建索引{org:1, _id:1},以优化查询和排序。你会注意到scanAndOrder在那之后这将是错误的。

更新:忘了提limitlimit通常会提高你的性能,因为你给了 mongo 一个缩短搜索时间的机会。如果您limit在对索引字段进行排序时,它会有所帮助,否则它必须在返回您正在寻找的结果之前扫描所有结果。

于 2012-09-21T01:16:25.180 回答