Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Índices compostos

Nesta página

  • Casos de uso
  • Começar
  • Detalhes
  • Limite de campo
  • Ordem do campo
  • Ordem de classificação
  • Campos de índices hashed
  • Prefixos de índices
  • Índices de compostos esparsos
  • Saiba mais

Os índices compostos coletam e classificam dados de dois ou mais campos em cada documento em uma collection. Os dados são agrupados pelo primeiro campo no índice e, em seguida, por cada campo subsequente.

Por exemplo, a imagem a seguir mostra um índice composto no qual os documentos são primeiro agrupados por userid em ordem crescente (alfabeticamente). Então, os scores para cada userid são classificados em ordem decrescente:

Diagrama de um índice composto no campo ``userid`` (ascendente) e no campo ``score`` (decrescente). O índice classifica primeiro pelo campo ``userid`` e depois pelo campo ``score``.

A indexação de campos comumente sujeitos a queries aumenta a probabilidade de queries cobertas. Uma query coberta é uma query que pode ser satisfeita inteiramente usando um índice e não precisa examinar nenhum documento, levando a um desempenho muito melhor.

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 UI para sistemas hospedados no MongoDB Atlas.

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.

Um índice composto em campos comumente sujeitos a queries aumenta as chances de cobrir essas queries. As queries cobertas são queries que podem ser totalmente satisfeitas usando um índice, sem examinar nenhum documento. Isso otimiza o desempenho da query.

Para criar um índice composto, consulte Criar um índice composto.

Esta seção descreve detalhes técnicos e limitações para índices compostos.

Um índice composto único pode conter até 32 campos.

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 regra ESR (Equality, Sort, Range [Igualdade, Classificação, Intervalo]).

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.

Os índices compostos podem conter um único campo de índice com hash.

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 a location

  • item, location e stock

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.

Os campos de índice são analisados em ordem; se uma query omitir um prefixo de índice, ela não poderá usar nenhum campo de índice que siga esse prefixo.

O MongoDB não pode usar o índice composto para oferecer suporte a consultas sobre essas combinações de campos:

  • location

  • stock

  • location e a stock

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.

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
Índices crescentes
Índices decrescentes
Somente indexa documentos que contêm um valor para pelo menos uma das chaves.
Índices crescentes
Índices decrescentes
Indexa um documento somente quando ele contém um valor para um dos campos geospatial. Não indexa documentos nos índices crescentes ou decrescentes.
Índices crescentes
Índices decrescentes
Somente indexa um documento quando ele corresponde a um dos campostext. Não indexa documentos nos índices crescentes ou decrescentes.

Para saber como criar índices compostos eficientes, consulte A regra ESR (Igualdade, classificação, intervalo).

← Criar um índice em um documento incorporado