Os índices compostos coletam e classificam dados de vários valores de campo de cada documento em uma collection. Você pode usar o índice composto para consultar o primeiro campo ou quaisquer campos de prefixo do índice. A ordem dos campos em um índice composto é muito importante. A B-tree criada por um índice composto armazena os dados classificados na ordem em que o índice especifica os campos.
Por exemplo, a imagem a seguir mostra um índice composto no qual os documentos são primeiro classificados por userid
em ordem crescente (alfabeticamente). Então, os scores
para cada userid
são classificados em ordem decrescente:
Para criar um índice composto, use o seguinte protótipo:
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
Você pode criar e gerenciar índices compostos na IU para implantações hospedadas no MongoDB Atlas.
Casos de uso
Se o aplicativo executar repetidamente uma query que contém múltiplos campos, é possível criar um índice composto para melhorar o desempenho dessa query. Por exemplo, um gerente de supermercado geralmente precisa procurar itens de estoque por nome e quantidade para determinar quais itens estão com estoque baixo. Você pode criar um índice composto nos campos item
e quantity
para melhorar o desempenho da query.
Começar
Para criar um índice composto, consulte Criar um índice composto.
Detalhes
Esta seção descreve detalhes técnicos e limitações para índices compostos.
Limite de campo
Um índice composto único pode conter até 32 campos.
Ordem do campo
A ordem dos campos indexados afeta a eficácia de um índice composto. Os índices compostos contêm referências a documentos de acordo com a ordem dos campos no índice. Para criar índices compostos eficientes, siga a diretriz ESR (Igualdade, Classificação e Intervalo).
Ordem de classificação
Os índices armazenam referências a campos em ordem de classificação crescente (1
) ou decrescente (-1
). Para índices compostos, a ordem de classificação pode determinar se o índice suporta uma operação de classificação. Para obter mais informações, consulte Ordem de classificação do índice composto.
Campos de índices hashed
Os índices compostos podem conter um único campo de índice com hash.
Prefixos de índices
Os prefixos de índices são os subconjuntos iniciais de campos indexados. Os índices compostos suportam queries em todos os campos incluídos no prefixo do índice.
Por exemplo, considere este índice composto:
{ "item": 1, "location": 1, "stock": 1 }
O índice tem estes prefixos de índice:
{ item: 1 }
{ item: 1, location: 1 }
O MongoDB pode usar o índice composto para suportar queries nessas combinações de campos:
item
item
e alocation
item
,location
estock
O MongoDB também pode usar o índice para suportar uma query nos campos item
e stock
, já que o campo item
corresponde a um prefixo. No entanto, somente o campo item
no índice pode suportar essa query. A query não pode usar o campo stock
que segue location
.
A estratégia de indexação do MongoDB elimina qualquer necessidade de organizar campos de correspondência exata em uma ordem específica. No entanto, se a query não especificar uma condição de igualdade em um prefixo de índice que precede ou se sobrepõe com a especificação de classificação, a operação não utilizará o índice de forma eficiente. Para obter mais informações, consulte Classificação e Subconjunto sem Prefixo de um Índice.
O MongoDB não pode usar o índice composto para oferecer suporte a consultas sobre essas combinações de campos:
location
stock
location
e astock
Sem o campo item
, nenhuma das combinações de campos anteriores corresponde a um índice de prefixo.
Dica
Remover índices redundantes
Se você tiver uma collection que tem tanto um índice composto quanto um índice em seu prefixo (por exemplo, { a: 1, b: 1 }
e { a: 1 }
), se nenhum índice tiver uma restrição esparsa ou única, você poderá remover o índice no prefixo ({ a: 1 }
). O MongoDB usa o índice composto em todas as situações que teria usado o índice prefixo.
Índices de compostos esparsos
Os índices compostos podem conter diferentes tipos de índices esparsos. A combinação de tipos de índice determina como o índice composto corresponde aos documentos.
Esta tabela resume o comportamento de um índice composto que contém diferentes tipos de índices esparsos:
Componentes do índice composto | Comportamento do índice composto |
---|---|
Ascending indexes Descending indexes | Somente indexa documentos que contêm um valor para pelo menos uma das chaves. |
Indexa um documento somente quando ele contém um valor para um dos campos | |
Somente indexa um documento quando ele corresponde a um dos campos |
Saiba mais
Para saber como criar índices compostos eficientes, consulte a diretriz ESR (Equality, Sort, Range).