Los índices compuestos recopilan y ordenan datos de múltiples valores de campo de cada documento en una colección. Puede usarse el índice compuesto para consultar el primer campo o cualquiera de los campos prefijos del índice. El orden de los campos en un índice compuesto es muy importante. El B-tree creado por un índice compuesto almacena los datos ordenados según el orden en que el índice especifica los campos.
Por ejemplo, la siguiente imagen muestra un índice compuesto donde los documentos se ordenan primero por userid En orden ascendente (alfabético). Luego, los scores por cada userid se ordenan en orden descendente:
Para crear un índice compuesto, utilice el siguiente prototipo:
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
Puede Cree y administre índices compuestos en la interfaz de usuario para implementaciones alojadas en MongoDB Atlas.
Casos de uso
Si la aplicación ejecuta repetidamente un query que contiene varios campos, se puede crear un índice compuesto para mejorar el rendimiento de ese query. Por ejemplo, el administrador de una tienda de comestibles a menudo necesita buscar artículos en el inventario por nombre y cantidad para determinar qué artículos tienen pocas unidades. Puede crearse un índice compuesto tanto en los campos item como en quantity para mejorar el rendimiento de los query.
Empezar
Para crear un índice compuesto, consulte Crear un índice compuesto.
Detalles
Esta sección describe los detalles técnicos y las limitaciones de los índices compuestos.
Límite del campo
Un único índice compuesto puede contener hasta 32 campos.
Orden de campos
El orden de los campos indexados tiene un impacto en la efectividad de un índice compuesto. Los índices compuestos contienen referencias a documentos según el orden de los campos en el índice. Para crear índices compuestos eficientes, se debe seguir la guía ESR (Igualdad, Orden, Rango).
Orden de clasificación
Los índices almacenan referencias a campos en orden de clasificación ascendente (1) o descendente (-1). Para índices compuestos, el orden de clasificación puede determinar si el índice admite una operación de clasificación. Para más información, consultar orden de clasificación de índice compuesto.
Campos de índice encriptado
Los índices compuestos pueden contener un solo campo de índice encriptado.
Prefijos de índices
Los prefijos de índice son los subconjuntos iniciales de los campos indexados. Los índices compuestos admiten los query en todos los campos incluidos en el prefijo del índice.
Por ejemplo, este índice compuesto:
{ "item": 1, "location": 1, "stock": 1 }
El índice tiene estos prefijos de índice:
{ item: 1 }{ item: 1, location: 1 }
MongoDB puede utilizar el índice compuesto para el soporte de los query sobre estas combinaciones de campos:
itemitemylocationitem,location, ystock
MongoDB también puede utilizar el índice para brindar soporte a una query en los campos item y stock, ya que el campo item corresponde a un prefijo. Sin embargo, el índice no es tan eficiente como { item: 1, stock: 1 }.
Por ejemplo, considera una query para "item": "saccharomyces cerevisiae" y "stock": 60. Si la colección contiene 10000 documentos que coinciden con "item": "saccharomyces cerevisiae" y solo 100 de esos documentos coinciden con "stock": 60, la query examina 10000 claves. En la etapa IXSCAN, la consulta filtra esas claves por el campo stock y solo devuelve 100 resultados a la siguiente etapa.
La estrategia de indexación de MongoDB elimina cualquier necesidad de disponer los campos de coincidencia exacta en un orden particular. Sin embargo, si la query no especifica una condición de igualdad en un prefijo del índice que preceda o se solape con la especificación de orden, la operación no utilizará el índice de manera eficiente. Para obtener más información, consultar Subconjunto de orden y sin prefijo de un índice.
MongoDB no puede utilizar el índice compuesto para dar soporte a los query sobre estas combinaciones de campos:
locationstocklocationystock
Sin el campo item, ninguna de las combinaciones de campos anteriores corresponde a un índice de prefijo.
Tip
Eliminar índices redundantes
Si tiene una colección que tiene tanto un índice compuesto como un índice en su prefijo (por ejemplo, { a: 1, b: 1 } y { a: 1 }), si ninguno de los índices tiene una restricción dispersa o única, se puede remover el índice en el prefijo ({ a: 1 }). MongoDB utiliza el índice compuesto en todas las situaciones en las que habría utilizado el índice prefijo.
Índices compuestos dispersos
Los índices compuestos pueden contener diferentes tipos de índices dispersos. La combinación de tipos de índice determina cómo el índice compuesto coincide con los documentos.
Esta tabla resume el comportamiento de un índice compuesto que incluye diferentes tipos de índices escasos:
Componentes del índice compuesto | Comportamiento del índice compuesto |
|---|---|
Ascending indexes Descending indexes | Solo indexa documentos que contengan un valor para, al menos, una de las claves. |
Solo indexa un documento cuando este contiene un valor para uno de los campos | |
Solo indexa un documento cuando coincide con uno de los campos |
Obtén más información
Para aprender cómo crear índices compuestos eficientes, consulte la guía ESR (Igualdad, Ordenación, Rango).