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 patrones comunes de query en la aplicación, se debe usar la etapa de agregación $queryStats. $queryStats informa métricas para formas de query, que agrupan las queries en función de los campos compartidos.
Crear índices para brindar soporte a queries comunes
Una vez que se sepan qué campos debe consultar frecuentemente la aplicación, se pueden crear índices para admitir los queries en esos campos. Para obtener más información, se debe consultar Ejemplos.
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, consulta 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.