Docs Menu
Docs Home
/ /

Índices compuestos

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:

Diagrama de un índice compuesto en el campo ``userid`` (ascendente) y en el campo ``score`` (descendente). El índice clasifica primero por el campo ``userid`` y luego por el campo ``score``.

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.

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.

Para crear un índice compuesto, consulte Crear un índice compuesto.

Esta sección describe los detalles técnicos y las limitaciones de los índices compuestos.

Un único índice compuesto puede contener hasta 32 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).

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.

Los índices compuestos pueden contener un solo campo de índice encriptado.

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:

  • item

  • item y location

  • item, location, y stock

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:

  • location

  • stock

  • location y stock

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.

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.

Ascending indexes
Descending indexes

Solo indexa un documento cuando este contiene un valor para uno de los campos geospatial. No indexa documentos en los índices ascendentes o descendentes.

Ascending indexes
Descending indexes

Solo indexa un documento cuando coincide con uno de los campos text. No indexa documentos en los índices ascendentes o descendentes.

Para aprender cómo crear índices compuestos eficientes, consulte la guía ESR (Igualdad, Ordenación, Rango).

Volver

Documentos incrustados

En esta página