请参阅:基于插槽的查询执行引擎
5.1 版本中的新功能。
为了查找并返回查询结果,MongoDB 使用以下查询引擎之一:
经典查询引擎
基于插槽的查询执行引擎,适用于从 MongoDB 5.1 开始的某些查询。
MongoDB自动选择引擎来执行查询。 在8.0之前的MongoDB版本中,您无法为特定查询手动指定引擎。 从MongoDB 8.0开始,您可以使用查询设置指定查询引擎。 有关详细信息,请参阅 setQuerySettings
。
如果满足某些条件,MongoDB 可以使用基于插槽的查询执行引擎执行一部分查询。在大多数情况下,与经典查询引擎相比,基于插槽的执行引擎提供更高的性能和更低的 CPU 和内存成本。
MongoDB 使用经典引擎执行不适合基于插槽的查询执行引擎的查询。
基于插槽的执行引擎的合格查询
MongoDB 针对每个查询确定使用基于插槽的执行引擎的资格,并考虑对查询中存在的每个操作符和表达式的支持。例如,使用基于插槽的执行引擎的两个常见管道是具有 $group
或 $lookup
阶段的聚合。然而,对基于插槽的执行引擎的支持与版本相关且在不断变化中。
要查看查询是否使用基于插槽的执行引擎,请参阅确定使用哪个查询引擎一节。
块处理
从版本 8.0 开始,MongoDB 可以使用块处理来执行某些时间序列查询。这一性能改进利用数据“块”而不是单个值来处理查询。当使用时间序列集合时,块处理可提高查询执行速度和吞吐量。
要学习;了解更多信息,请参阅查询时间序列数据。
确定使用的查询引擎
可以使用几种方法确定是使用经典引擎还是基于插槽的执行引擎执行查询。
检查查询解释结果
查询查询引擎异。 示例,使用基于插槽的执行引擎执行的查询的解释结果包括explain.queryPlanner.winningPlan.slotBasedPlan
字段。
有关查询引擎之间解释结果差异的更多信息,请参阅解释输出结构。
检查慢查询日志
从 MongoDB 6.2 开始,慢操作日志消息包含 queryFramework
字段,指示哪个查询引擎执行了该查询:
queryFramework: "classic"
表示经典引擎完成该查询。queryFramework: "sbe"
表示基于槽的查询执行引擎执行该查询。
要查看使用基于插槽的执行引擎的查询的示例日志消息,请参阅慢速操作。