Nuevo en la versión 5.1.
Para buscar y devolver resultados de queries, MongoDB emplea uno de los siguientes motores de consulta:
El motor de query clásico
El motor de ejecución de consultas basado en slots, que está disponible para algunas consultas a partir de MongoDB 5.1.
El motor de ejecución de queries basado en ranuras utiliza un modelo basado en "ranuras" para evitar la materialización de resultados intermedios durante el tiempo de ejecución de la query, lo que permite una ejecución más eficiente.
MongoDB selecciona automáticamente el motor para ejecutar la query. En las versiones de MongoDB anteriores a 8.0, no se puede especificar manualmente un motor para una query en particular. A partir de MongoDB 8.0, puedes utilizar la configuración de consultas para especificar un motor para las consultas. Para obtener detalles, consulte
setQuerySettings.
MongoDB puede utilizar el motor de ejecución de consultas basado en slots para un subconjunto de consultas, siempre que se cumplan ciertas condiciones. En la mayoría de los casos, el motor de ejecución basado en ranuras proporciona un mejor rendimiento y menores costos de CPU y memoria en comparación con el motor de query clásico.
MongoDB utiliza el motor clásico para queries que no son elegibles para el motor de ejecución de queries basado en slots.
Consultas elegibles para el motor de ejecución basado en ranuras
MongoDB determina la elegibilidad para usar el motor de ejecución basado en ranuras para cada query, y considera el soporte para cada operador y expresión presente en la query. Por ejemplo, dos pipelines comunes que utilizan un motor de ejecución basado en slots son las agregaciones con $group o $lookup etapas. Sin embargo, el soporte para el motor de ejecución basado en ranuras depende de la versión y está cambiando activamente.
Para ver si tu consulta utilizó el motor de ejecución basado en slots, consulta el Sección Determinar cuál motor de consultas se utilizó.
Importante
MongoDB desactiva automáticamente el motor de ejecución basado en ranuras en colecciones con un índice que tiene un prefijo de ruta encriptada de una ruta no encriptada, donde ambas rutas están en el índice.
Procesamiento en bloque
A partir de la versión 8.0, MongoDB puede ejecutar ciertas consultas de series de tiempo mediante procesamiento por bloques. Esta mejora del rendimiento procesa las consultas en "bloques" de datos, en lugar de en valores individuales. El procesamiento de bloques mejora la velocidad de ejecución de las consultas y el rendimiento cuando se trabaja con colecciones de series de tiempo.
Para obtener más información, consulte Consulta de datos de series de tiempo.
Determinar qué motor de query se utilizó
Existen varias maneras de determinar si se utilizó el motor clásico o el motor de ejecución basado en slots para ejecutar una query.
Verificar resultados de explicación de la query
Los resultados de explicación de una consulta varían según el motor de consulta utilizado. Por ejemplo, los resultados de explicación de las consultas ejecutadas con el motor de ejecución basado en ranuras incluyen el explain.queryPlanner.winningPlan.slotBasedPlan campo.
Para más información sobre las diferencias en los resultados de explicación entre los motores de query, consulta Estructura de Salida de Explicación.
Comprobar registros de consultas lentas
Los mensajes de registro de operaciones lentas incluyen un campo queryFramework que indica qué motor de query ejecutó el query:
queryFramework: "classic"indica que el motor clásico ejecutó el query.queryFramework: "sbe"indica que el motor de ejecución de query basado en ranuras ejecutó el query.
Para ver un ejemplo de mensaje de registro de una consulta que utilizó el motor de ejecución basado en slots, consulta Operación lenta.