Mongodb 相同的查询会导致不同的执行时间和N扫描。为什么?

Mongodb 相同的查询会导致不同的执行时间和N扫描。为什么?,mongodb,Mongodb,我运行完全相同的查询,但当我分析mongo日志时,我发现执行时间和nscanned属性与完全相同的查询非常不同。有什么想法吗?日志如下 Mon Jul 7 11:53:03.852 [conn13685] query news-data.news query: { query: { $and: [ { $or: [ { t: "F" } ] }, { $or: [ { s: "FRKS" } ] }, { $or: [ { l: "tr" } ] } ], f: false }, orderb

我运行完全相同的查询,但当我分析mongo日志时,我发现执行时间和nscanned属性与完全相同的查询非常不同。有什么想法吗?日志如下

Mon Jul  7 11:53:03.852 [conn13685] query news-data.news query: { query: { $and: [ { $or: [ { t: "F" } ] }, { $or: [ { s: "FRKS" } ] }, { $or: [ { l: "tr" } ] } ], f: false }, orderby: { d: -1 }, $readPreference: { mode: "secondaryPreferred" } } cursorid:7244510450672463669 ntoreturn:75 ntoskip:0 nscanned:13693 keyUpdates:0 locks(micros) r:116740 nreturned:75 reslen:175088 116ms

Mon Jul  7 13:42:50.075 [conn13622] query news-data.news query: { query: { $and: [ { $or: [ { t: "F" } ] }, { $or: [ { s: "FRKS" } ] }, { $or: [ { l: "tr" } ] } ], f: false }, orderby: { d: -1 }, $readPreference: { mode: "secondaryPreferred" } } cursorid:7272408840112234507 ntoreturn:45 ntoskip:0 nscanned:462478 keyUpdates:0 numYields: 10 locks(micros) r:6869463 nreturned:45 reslen:112182 3734ms

MongoDB用户Google Group已经回答了这一问题,为完整起见,重复以下内容:

您可以看到,其中一个查询必须生成10次,这意味着要恢复其工作,可能需要再次扫描已扫描的某些文档

新墨西哥州:10


我在这里看到的一个区别是“ntoreurn”值一个是75,另一个是45。“NTORTURN”是请求的文档数或限制值。我建议在mongo shell中同时运行这两个命令,并附加.explain(),它将显示索引的使用情况,同时使用两个限制值运行。还有一些日志返回的是相同的。所以我认为这不是问题的根源。解释输出如下:rs_b:PRIMARY>db.news.find({“$和”:[{“$或”:[{s:FRKS}},{“$或”:[{l:tr}],f:false})。sort({d:-1})。limit(45)。Explain(){“光标”:“BtreeCursor news\u locale\u source”\u idx,“isMultiKey”:false,“n”:45,“nscannedObjects”:67,“nscanned”:67,“nscdObjectPlans”:376,您是否对同一数据集运行了解释?在此解释中,您正在扫描67个条目以提供一个结果。这比您上面的结果要好得多。我将针对您的辅助实例运行解释,并且您的readPreference是“secondaryPreferred”。可能您的辅助项缺少索引?是的,相同的数据集。此外,碎片中没有辅助项,只有主项存在。感谢您的回答。我在组中未找到任何问题。如果可能,您可以发送问题链接吗。谢谢。哦,是的,您将其发布到了错误的组(开发人员而不是用户)