Un índice admite una query cuando el índice contiene todos los campos escaneados por la query. La query escanea el índice y no la colección. Crear índices que respalden las consultas resulta en un aumento considerable del rendimiento de las consultas.
Este documento describe estrategias para crear índices que soportan queries.
Crea un índice de clave única si todas las consultas utilizan la misma clave única
Si solo realizas consultas con una sola clave en una colección determinada, entonces solo necesitas crear un único índice de clave única para esa colección. Por ejemplo, podrías crear un índice en category en la colección product:
db.products.createIndex( { "category": 1 } )
Crear Índices Compuestos para Soportar Varias queries Diferentes
Si a veces query sólo con una clave y otras veces query con esa clave combinada con una segunda clave, entonces crear un índice compuesto es más eficiente que crear un índice de clave única. MongoDB utilizará el índice compuesto para ambas consultas. Por ejemplo, se podría crear un índice tanto en category como en item.
db.products.createIndex( { "category": 1, "item": 1 } )
Esto te permite ambas opciones. Puedes query solo en category, y también puedes query en category combinado con item. Solo un(a) Un índice compuesto en varios campos puede dar soporte a todas las consultas que busquen un subconjunto "prefijo" de esos campos.
Ejemplo
El siguiente índice en una colección:
{ x: 1, y: 1, z: 1 }
Puede dar soporte a consultas que cuentan con el soporte de los siguientes índices:
{ x: 1 } { x: 1, y: 1 }
Existen algunas situaciones en las que los índices de prefijo pueden ofrecer un mejor rendimiento de consulta: por ejemplo, si z es un arreglo grande.
El índice { x: 1, y: 1, z: 1 } también puede admitir muchas de las mismas consultas que el siguiente índice:
{ x: 1, z: 1 }
Además, { x: 1, z: 1 } tiene un uso adicional. Dada la siguiente query:
db.collection.find( { x: 5 } ).sort( { z: 1} )
El índice { x: 1, z: 1 } admite tanto la query como la operación de ordenación, mientras que el índice { x: 1, y: 1, z: 1 } solo admite la query. Para obtener más información sobre el ordenamiento, consulte Utilización de índices para ordenar los resultados de la query.
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 aprender más, consulta Cree 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.
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.