sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta simple de MongoDB muy lenta aunque se establece el índice

No tiene ningún índice que mongo usará automáticamente para eso, por lo que está haciendo un escaneo completo de la tabla.

Como se menciona en los documentos

Por qué

Si tiene un índice en a, b, y busca por a solo:se utilizará automáticamente un índice. Esto se debe a que es el comienzo del índice (que es rápido de hacer), la base de datos puede simplemente ignorar el resto del valor del índice.

Un índice en a,b es ineficiente al buscar por b solo simplemente porque no da la posibilidad de utilizar el índice de búsqueda con "comienza con esta cadena fija".

Entonces, ya sea:

  • Incluye _reference_1_id en la consulta (probablemente irrelevante)
  • O agregue un índice en _reference_2_id (si consulta por el campo a menudo)
  • O usar una pista

Sugerencia

Probablemente su opción de menor costo en este momento.

Agregue una sugerencia de consulta para forzar el uso de su _reference_1_id_1__reference_2_id_1_id_1 índice. Lo que probablemente sea mucho más rápido que un escaneo completo de la tabla, pero mucho más lento que un índice que comienza con el campo que está usando en la consulta.

es decir,

db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");