我正在使用MongoDB开发一个Web应用程序。我注意到一种现象,即当重复执行相同的查询时,处理速度会提升并最终收敛到某一点。就像查询集合中的所有文档一样,每个查询的时间使用量将 100000 ms - > 20000毫秒 - > 9000ms - > ... - > 500毫秒。
我想知道速度提升背后的原因是什么?以及如何估计收敛点?
答案 0 :(得分:1)
有很多原因,我可以给出一些观点。
首先,MongoDB能够为您的查询选择最佳索引。为此,MongoDB使用查询计划。但这项操作需要时间:
如果没有匹配的条目,则生成查询计划程序 试验期间的候选人评估计划。查询计划器 选择获胜计划,创建包含获胜的缓存条目 计划,并使用它来生成结果文档。
https://docs.mongodb.com/manual/core/query-plans/
INDEX应加载到内存以加快性能,这也需要时间。试着看看Touch:
https://docs.mongodb.com/manual/reference/command/touch/
touch命令将数据从数据存储层加载到内存中。 touch可以加载数据(即文档)索引或两个文档和 索引。
另一个原因,INDEX不适合内存以便知道这是否是你的情况也许你可以用totalIndexSize检查
我更专注于改进查询规划方面,因为MongoDB并不是一直为你做出最好的决定。
我认为应该仔细评估所有这些主题,以避免性能下降。
祝你好运!