我正在用MongoDB开发一个web应用程序。我注意到一种现象,当重复执行相同的查询时,处理速度会提高,最后会在某个点收敛。与查询集合中的所有文档一样,每次查询的时间将为100000 ms -> 20000 ms -> 9000 ms -> . -> 500 ms。
我想知道提速背后的原因是什么?以及如何估计收敛点?
发布于 2017-08-17 08:10:17
有很多原因,我可以说几点。
首先,MongoDB能够为您的查询选择最佳索引。为此,MongoDB使用查询计划。但是这个操作需要时间:
如果没有匹配的条目,查询规划器将生成候选计划,以便在试用期间进行评估。查询计划器选择一个获胜计划,创建一个包含获奖计划的缓存条目,并使用该条目生成结果文档。
https://docs.mongodb.com/manual/core/query-plans/
索引应该加载到内存中,以加快性能,这也需要时间。试着看看触觉:
https://docs.mongodb.com/manual/reference/command/touch/
触摸命令将数据从数据存储层加载到存储器中。触摸可以加载数据(即文档)索引,或者同时加载文档和索引。
的另一个原因是,索引不适合内存,以便知道是否是您的情况--也许您可以使用totalIndexSize进行检查
我更专注于改进查询计划器方面,因为MongoDB并不总是为您做出最好的决定。
在我看来,所有这些问题都应该仔细评估,以避免性能下降。
祝好运!
https://stackoverflow.com/questions/45720415
复制相似问题