Un índice cubre un query cuando el índice contiene todos los campos escaneados por el query. Un query cubierto escanea el índice y no la colección, lo que mejora el rendimiento del query.
Los índices también pueden admitir parcialmente los queries si un subconjunto de los campos consultados está indexado.
Acerca de esta tarea
Una única colección puede tener un máximo de 64 índices. Sin embargo, un exceso de índices puede degradar el rendimiento antes de que se alcance ese límite. Para colecciones con una alta proporción de escritura a lectura, los índices pueden degradar el rendimiento porque cada inserción también debe actualizar los índices.
Pasos
Identifica queries comunes.
Para identificar los patrones de query comunes en tu aplicación, utiliza
$queryStats etapa de agregación. $queryStats informa métricas para formas del query, que agrupan las consultas según los campos compartidos.
Crear índices para brindar soporte a queries comunes
Después de averiguar en qué campos tu aplicación hace query con frecuencia, puedes crear índices para facilitar las queries en esos campos. Para más información, consulte ejemplo.
Analizar el uso de índices
Una vez que la aplicación comience a usar índices, se puede analizar la efectividad de los índices. Para ver las estadísticas y el uso del índice, se puede:
Utiliza la etapa de agregación
$indexStats.Para implementaciones de MongoDB Atlas, consulta Índices en la interfaz de usuario de MongoDB Atlas.
Considera borrar los índices no utilizados para optimizar el rendimiento de la aplicación. Para obtener más información, consulta Remover índices innecesarios.
Repite este procedimiento periódicamente para asegurarte de que tus índices brinden soporte a su carga de trabajo actual.
Ejemplos
Crea un índice de una sola clave
Si la aplicación solo realiza queries de una única clave en una colección determinada, entonces se necesita crear un índice de clave única para esa colección. Por ejemplo, se puede crear un índice en category en la colección product:
db.products.createIndex( { category: 1 } )
El índice anterior admite este query:
db.products.find( { category: "electronics" } )
Crear un índice compuesto
Si la aplicación realiza queries tanto sobre una clave única como sobre varias claves, un índice compuesto es más eficiente que un índice de clave única. Por ejemplo, se puede crear un índice en los campos category, item y location:
db.products.createIndex( { category: 1, item: 1, location: 1 } )
Prefijos de índices
Un índice compuesto admite queries sobre los prefijos del índice, que son los subconjuntos iniciales de los campos indexados. Por ejemplo, el índice precedente admite estos queries:
db.products.find( { category: "electronics" } ) db.products.find( { category: "electronics", item: "television" } )
Para obtener más información y consideraciones sobre el rendimiento de los prefijos de índice, consulta Prefijos de índice.
Crear índices para brindar soporte a la búsqueda de texto
Para los datos almacenados en MongoDB Atlas, puedes respaldar la búsqueda de texto completo con los índices de búsqueda de Atlas. Para obtener más información, consulte Crear un índice de búsqueda de Atlas.
Para las implementaciones autogestionadas (que no son de Atlas), MongoDB proporciona un tipo de índice text que admite la búsqueda de contenido de string en una colección. Para aprender más sobre los índices de texto autogestionados, consulta Índices de texto en implementaciones autogestionadas.
Crear índices de búsqueda vectorial
Los índices de búsqueda vectorial admiten queries sobre incrustaciones vectoriales. Para crear índices de búsqueda vectorial, consulta Campos de índice para la búsqueda vectorial.
Uso e intercalación del índice
Para utilizar un índice para las comparaciones de cadenas, una operación también debe especificar la misma intercalación. Es decir, un índice con una intercalación no puede soportar una operación que realice comparaciones de strings en los campos indexados si la operación especifica una intercalación diferente.
Advertencia
Las claves de índice sensibles a la intercalación pueden ser más grandes que las claves de índice que no la utilizan, ya que los índices configurados con intercalación utilizan claves de intercalación ICU para lograr un orden de clasificación.