Optimiza el rendimiento de las consultas

Para solucionar problemas de consultas lentas, usa la Explicación de consulta para obtener el plan de ejecución de consultas y el perfil de ejecución del entorno de ejecución. En la siguiente sección, se describen los pasos que puedes seguir para optimizar el rendimiento de las consultas según el perfil de ejecución:

Limita la cantidad de resultados

Usa el campo de registros que se muestran en el árbol de ejecución para identificar si la consulta muestra muchos documentos. Considera limitar la cantidad de documentos que se muestran con la cláusula $limit. Esto reduce el tamaño de bytes serializados de los resultados cuando se devuelven a los clientes a través de la red. En los casos en los que el nodo Limit está precedido por un nodo MajorSort, el motor de consultas puede combinar los nodos Limit y MajorSort, y reemplazar una materialización completa en memoria y una ordenación con una ordenación TopN, lo que reduce el requisito de memoria para la consulta.

Limita el tamaño del documento resultante

Considera limitar el tamaño del documento que se muestra con la cláusula $project para evitar recuperar campos innecesarios. Esto ayuda a reducir el costo de procesamiento y memoria de procesar los resultados intermedios y el tamaño de bytes serializados de los resultados cuando se devuelven a los clientes a través de la red. En los casos en que todos los campos a los que se hace referencia en la consulta están cubiertos por un índice normal (no multiclave), esto también permite que el análisis de índices cubra por completo la consulta, lo que evita la necesidad de recuperar documentos del almacenamiento principal.

Usa índices

Sigue las siguientes instrucciones para configurar y optimizar los índices.

Identifica si la consulta usa un índice

Para identificar si la consulta usa un índice, verifica los nodos hoja en el árbol de ejecución. Si el nodo hoja del árbol de ejecución es un nodo TableScan, significa que la consulta no usa un índice y analiza documentos del almacenamiento principal. Si se usa un índice, el nodo hoja del árbol de ejecución mostrará el ID y los campos del índice.

Identifica si se puede optimizar el índice que se usa

Un índice es útil para una consulta si puede reducir la cantidad de documentos que el motor de consulta necesita recuperar del almacenamiento principal o si su ordenamiento de campos puede entregar el requisito de ordenamiento de la consulta.

Si se usa un índice para una consulta, pero el motor de consultas aún recupera y descarta muchos documentos, como lo identifica un nodo de escaneo que muestra muchos registros seguidos de un nodo de filtro que muestra pocos registros, esto es un signo de que el predicado de consulta que se satisface con el índice no es selectivo. Para crear un índice más adecuado, consulta Crea índices.

Si se usa un índice no multiclave para una consulta, pero el motor de consultas aún realiza un reordenamiento en memoria del conjunto de resultados, como lo identifica un nodo MajorSort en el árbol de ejecución de consultas, esto es una señal de que el índice utilizado no se puede usar para entregar el requisito de ordenamiento de la consulta. Para crear un índice más adecuado, consulta la siguiente sección.

Crear índices

Sigue la documentación de administración de índices para crear índices. Para asegurarte de que tu consulta pueda usar índices, crea índices normales (no multiclave) con campos en el siguiente orden:

  1. Todos los campos que se usarán en los operadores de igualdad. Para maximizar las posibilidades de reutilización entre las consultas, ordena los campos en orden descendente de ocurrencia de los campos en los operadores de igualdad entre las consultas.
  2. Todos los campos que se ordenarán (en el mismo orden)
  3. Campos que se usarán en operadores de rango o desigualdad en orden descendente de selectividad de la restricción de consulta
  4. Campos que se mostrarán como parte de una consulta en el índice: Si incluyes estos campos en el índice, este podrá abarcar la consulta y evitar tener que recuperar el documento del almacenamiento principal.

Para las consultas que implican filtrar y ordenar campos de array, considera crear índices de varias claves.

Usa una sugerencia de consulta

Si creaste un índice más adecuado para la consulta, pero el motor de consultas no lo usa, puedes anular la preferencia de índice del motor de consultas con una sugerencia de consulta.