Este documento aborda algunas preguntas comunes sobre MongoDB Índices. Para más información sobre los índices, consulte Índices.
¿Cómo creo un índice?
Para crear un índice en una colección, utilice el
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 un índice al rendimiento de una base de datos?
Las compilaciones de índices de MongoDB en una colección completa requieren un bloqueo exclusivo de lectura y escritura en la colección. Las operaciones que requieren un bloqueo de lectura o escritura en la colección deben esperar hasta que libere el mongod bloqueo.
Para la versión de compatibilidad de características (fcv),
"4.2"MongoDB utiliza un proceso de compilación optimizado que solo mantiene el bloqueo exclusivo al principio y al final de la compilación del índice. El resto del proceso de compilación se basa en operaciones de lectura y escritura intercaladas.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 compilaciones de índices en conjuntos de réplicas presentan consideraciones de rendimiento y riesgos específicos. Consulte Compilaciones de índices en entornos replicados para obtener más información. Para minimizar el impacto de la compilación de un índice en conjuntos de réplicas, incluidos los conjuntos de réplicas de fragmentos, utilice un procedimiento de compilación de índices continuos, como se describe en Compilaciones de índices continuos en conjuntos de réplicas.
¿Cómo puedo supervisar el progreso de la creación del índice?
Para obtener información sobre las operaciones de creación de índices que se están ejecutando actualmente, consulte Operaciones de indexación activas.
¿Cómo finalizar la creación de un índice?
Para finalizar la compilación de un índice en curso, utilice db.collection.dropIndex() o sus ayudantes de shell, dropIndex() o.dropIndexes db.killOp() No utilice para finalizar compilaciones de índice en curso en conjuntos de réplicas o clústeres fragmentados.
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 Anular compilaciones de índices en progreso.
¿Cómo puedo ver qué índices existen en una colección?
Para enumerar los índices de una colección, utilice el db.collection.getIndexes() método.
¿Cómo puedo ver si una consulta utiliza un índice?
Para inspeccionar cómo MongoDB procesa una consulta, utilice el explain() método.
¿Cómo puedo determinar qué campos 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 que proporciona información sobre el tamaño de cada índice de la indexSizes colección.
¿Cómo afectan las operaciones de escritura a los índices?
Las operaciones de escritura pueden requerir actualizaciones de 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 su aplicación escribe mucho, 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.