Este documento aborda algunas preguntas comunes sobre MongoDB índice. Para más información sobre índices, consulta Índices.
¿Cómo creo un índice?
Para crear un índice en una colección, utiliza la
db.collection.createIndex()Método. Crear un índice es una operación administrativa. En general, las aplicaciones no deberían llamar a con db.collection.createIndex() regularidad.
Nota
La creación de índices puede afectar el rendimiento; consulte ¿Cómo afecta la creación de un índice al rendimiento de la base de datos? Los administradores deben considerar las implicaciones de rendimiento antes de crear índices.
¿Cómo afecta la creación de índices al rendimiento de la base de datos?
La creación de índices de MongoDB en una colección poblada requiere un bloqueo exclusivo de lectura-escritura contra la colección. Las operaciones que necesitan un bloqueo de lectura o escritura en la colección deben esperar hasta que el mongod libere el bloqueo.
Para compatibilidad de características entre versiones (fcv)
"4.2", MongoDB utiliza un proceso de compilación optimizado que únicamente mantiene el bloqueo exclusivo al principio y al final de la creación de índices. El resto del proceso de compilación se adapta a la intercalación de operaciones de lectura y escritura.Para la compatibilidad de características entre versiones (compatibilidad de características entre versiones)
"4.0", el proceso por defecto de creación de índices en primer plano mantiene el bloqueo exclusivo para toda la creación del índice.backgroundla creación de índices no toma un bloqueo exclusivo durante el proceso.
Para obtener más información sobre el proceso de creación de índices, consulta Creación de índices en colecciones pobladas.
Las creación de índices en sets de réplicas tienen consideraciones específicas de rendimiento y riesgos. Consulta Creación de índices en entornos replicados para obtener más información.
¿Cómo puedo supervisar el progreso de la creación del índice?
Para obtener información sobre las operaciones actuales de creación de índices en ejecución, consulta Operaciones de indexación activas.
¿Cómo finalizo una creación de índice?
Para finalizar una creación de índices en curso, utiliza los db.collection.dropIndex() o sus asistentes de shell dropIndex() o dropIndexes. No uses db.killOp() para terminar la creación de índices en curso en sets de réplicas o clústeres particionados.
No se puede finalizar la compilación de un índice replicado en miembros secundarios de un conjunto de réplicas. Primero, debe eliminar el índice en el primario. El primario detiene la compilación del índice y crea una abortIndexBuild entrada de registro de operaciones asociada. Los secundarios que replican la abortIndexBuild entrada de registro de operaciones detienen la compilación del índice en curso y descartan el trabajo de compilación.
Para obtener más información, consulte Detener creación de índices en curso.
¿Cómo puedo ver qué índices hay en una colección?
Para enumerar los índices de una colección, utiliza el método db.collection.getIndexes().
¿Cómo puedo ver si una consulta utiliza un índice?
Para inspeccionar cómo MongoDB procesa una consulta, usa el método explain().
¿Cómo determino qué campos debo indexar?
Diversos factores determinan qué campos indexar, incluyendo la selectividad y el soporte para múltiples formas del query. Para obtener más información, consulta Consideraciones operativas para índices y Estrategias de indexación.
¿Cómo puedo ver el tamaño de un índice?
El db.collection.stats() incluye un documento indexSizes que proporciona información sobre el tamaño de cada índice en la colección.
¿Cómo afectan las operaciones de escritura a los índices?
Las operaciones de escritura pueden requerir actualizaciones en los índices:
Si una operación de escritura modifica un campo indexado, MongoDB actualiza todos los índices que tienen el campo modificado como clave.
Por lo tanto, si tu aplicación realiza muchas operaciones de guardar, los índices podrían afectar el rendimiento.
¿Cómo impactan los datos aleatorios en el rendimiento de los índices?
Si una Operación inserta una gran cantidad de datos aleatorios (por ejemplo, índices encriptados) en un campo indexado, el rendimiento de las inserciones puede disminuir. Las inserciones masivas de datos aleatorios generan entradas de índice aleatorias, lo que incrementa el tamaño del índice. Si el índice alcanza un tamaño que requiere que cada inserción aleatoria acceda a una entrada de índice diferente, las inserciones resultan en una alta tasa de desalojo y reemplazo de la caché de WiredTiger. Cuando esto ocurre, el índice deja de estar completamente en caché y se actualiza en el disco, lo que reduce el rendimiento.
Para mejorar el rendimiento de las inserciones masivas de datos aleatorios en campos de índice, puedes:
Descartar el índice y luego volver a crearlo después de insertar los datos aleatorios.
Inserta los datos en una colección vacía sin índice.
Crear el índice después de la inserción masiva ordena los datos en memoria y realiza una inserción ordenada en todos los índices.
¿Cuándo debo utilizar una compilación de índice móvil?
Solamente usa una creación continua de índices si tu implementación cumple con uno de los siguientes casos:
Si tu utilización promedio de la CPU excede (N-1)/N-10% donde N es el número de hilos de CPU disponibles para mongod
Si la tasa de llenado de caché de WiredTiger excede regularmente el 90%
Advertencia
Evita realizar procesos de creación de índices en modo continuo y replicado al mismo tiempo, ya que podría generar problemas inesperados, como compilaciones fallidas y bucles de fallos.
Nota
Si tu implementación no cumple con estos criterios, usa la creación de índices por defecto.
Tip
Con Atlas, puede escalar temporalmente su clúster para cumplir con los requisitos de una compilación de índice tradicional. Sin embargo, Atlas cobra por escalar su clúster. Consulte Costos de configuración del clúster para obtener más información.