Optimiza el rendimiento de las consultas
Para solucionar problemas de consultas lentas, usa Explicación de consulta para obtener el plan de ejecución de consultas y el perfil de ejecución del tiempo 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 records returned en el árbol de ejecución para identificar si la consulta devuelve muchos documentos. Considera limitar la cantidad de documentos que se devuelven con la cláusula $limit
. Esto reduce el tamaño de los bytes serializados de los resultados cuando se devuelven a los clientes a través de la red. En los casos en que el nodo Limit
está precedido por un nodo MajorSort
, el motor de consultas puede fusionar los nodos Limit
y MajorSort
, y reemplazar una materialización y una ordenación completas en la memoria por una ordenación TopN, lo que reduce el requisito de memoria para la consulta.
Limita el tamaño del documento de resultado
Considera limitar el tamaño del documento que se devuelve con la cláusula $project
para evitar recuperar campos innecesarios. Esto ayuda a reducir el costo de procesamiento y memoria de 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 de varias claves), esto también permite que la consulta esté completamente cubierta por el análisis del índice, lo que evita la necesidad de recuperar documentos del almacenamiento principal.
Usa índices
Sigue las instrucciones que se indican a continuación 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 utilizado
Un índice es útil para una búsqueda si puede reducir la cantidad de documentos que el motor de búsqueda necesita recuperar del almacenamiento principal o si el orden de sus campos puede satisfacer el requisito de ordenamiento de la búsqueda.
Si se usa un índice para una consulta, pero el motor de consultas sigue recuperando y descartando muchos documentos, como lo identifica un nodo de exploración que devuelve muchos registros seguido de un nodo de filtro que devuelve pocos registros, esto es un signo de que el predicado de la consulta satisfecho con el índice no es selectivo. Para crear un índice más adecuado, consulta Crea índices.
Si se usa un índice que no es de varias claves para una consulta, pero el motor de consultas sigue reordenando en la memoria el conjunto de resultados, como lo identifica un nodo MajorSort en el árbol de ejecución de la consulta, esto indica que el índice utilizado no se puede usar para cumplir con 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 regulares (no de varias claves) con campos en el siguiente orden:
- Son todos los campos que se usarán en los operadores de igualdad. Para maximizar la probabilidad de reutilización en las consultas, ordena los campos en orden descendente de la frecuencia con la que aparecen en los operadores de igualdad entre las consultas.
- Todos los campos por los que se ordenará (en el mismo orden).
- Campos que se usarán en operadores de rango o desigualdad en orden descendente de selectividad de la restricción de consulta.
- Campos que se devolverán como parte de una consulta en el índice: Incluir estos campos en el índice permite que este cubra la consulta y evita 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.
Sugerencia de uso de la 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.