Solo es relevante para la edición Enterprise de Cloud Firestore. |
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 estas 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 de ejecución es un nodo TableScan, significa que la consulta no usa un índice y está analizando documentos del almacenamiento principal. Si se usa un índice, el nodo hoja 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 análisis 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 que se cumple 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 realizando una reordenación en la memoria del conjunto de resultados, como se identifica con 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.
Crea í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.
Para obtener más información sobre el resultado de una consulta ejecutada con Query Explain, consulta la referencia de ejecución de consultas.