Performance Mongo:寻找收集数百万实例的最快查询

Performance Mongo:寻找收集数百万实例的最快查询,performance,mongodb,Performance,Mongodb,我收集了这个简单对象的数百万个实例: { Org: string, Value: string } 通过[Org]字段有一个二级索引,大约有数千个不同的[Org]值。此集合不应更新,因为它一次填写一次 现在我有一个任务:按自然顺序(它们被插入数据库的顺序,即,$orderby:_id)请求特定的[Org]值,并受特定数量的限制,以获得最佳性能。我的问题是: 在这种情况下,orderby、query、limit和sort等运算符的顺序是否会影响性能和执行计划 查询中将使用这两个索引(次要索

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

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

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

  • 在这种情况下,
    orderby
    query
    limit
    sort
    等运算符的顺序是否会影响性能和执行计划

  • 查询中将使用这两个索引(次要索引<代码>[Org]和默认主要索引<代码>\u id)吗

  • MongoDb是否有任何工具可以像SQL Server查询分析器那样跟踪索引的使用情况


您正在寻找
explain()
以查看查询如何使用索引。您可以通过返回的“游标”查看正在使用的索引,一些关键统计信息是
nscanned
n
scanander
millis

需要注意的一点是,mongodb只能在每个查询中使用一个索引

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

更新:忘记提及
限制
limit
通常会提高您的性能,因为您给了mongo一个缩短搜索的机会。如果您在索引字段上排序时
限制
,则会有所帮助,否则它必须在返回您要查找的结果之前扫描所有结果