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

Crie índices para oferecer suporte a suas queries

Nesta página

  • Criar um índice de chave única se todas as queries usarem a mesma chave única
  • Crie índices compostos para oferecer suporte a diversas queries diferentes
  • Crie índices para dar suporte à pesquisa de texto
  • Uso do Índice e Agrupamento

Um índice suporta uma query quando o índice contém todos os campos verificados pela query. A query analisa o índice, e não a collection. A criação de índices que suportam queries resulta em um grande aumento no desempenho da query.

Este documento descreve estratégias para criar índices que suportam queries.

Se você só query uma única chave em determinada coleção, então você precisa para criar apenas um índice de chave única para essa coleção. Por exemplo, você pode criar um índice em category na coleção product:

db.products.createIndex( { "category": 1 } )

Se, às vezes, você fizer query de apenas uma chave e, outras vezes, fizer query dessa chave combinada com uma segunda chave, a criação de um índice composto será mais eficiente do que a criação de um índice de chave única. O MongoDB usará o índice composto para ambas as queries. Por exemplo, você pode criar um índice em category e item.

db.products.createIndex( { "category": 1, "item": 1 } )

Isso permite ambas as opções. Você pode consultar apenas category e também pode consultar category combinado com item. Um únicoíndice composto em vários campos pode suportar todas as queries que pesquisam um subconjunto de "prefixos" desses campos.

Exemplo

O seguinte índice em uma coleção:

{ x: 1, y: 1, z: 1 }

Pode suportar queries que os seguintes índices são compatíveis:

{ x: 1 }
{ x: 1, y: 1 }

Existem algumas situações em que os índices de prefixo podem oferecer melhor desempenho da query: por exemplo, se z for uma array grande.

O índice { x: 1, y: 1, z: 1 } também pode suportar muitas das mesmas queries que o seguinte índice:

{ x: 1, z: 1 }

Além disso, { x: 1, z: 1 } tem um uso adicional. Dada a seguinte query:

db.collection.find( { x: 5 } ).sort( { z: 1} )

O índice { x: 1, z: 1 } oferece suporte à operação de classificação e à query, enquanto o índice { x: 1, y: 1, z: 1 } oferece suporte apenas à query. Para obter mais informações sobre classificação, consulte Usar índices para classificar os resultados da query.

A partir da versão 2.6, o MongoDB pode usar a interseção de índices para atender a consultas. A escolha entre criar índice composto que suporte suas query ou confiar na interseção de índices depende das especificidades do seu sistema. Consulte Interseção de índices e índices compostos para obter mais detalhes.

Para dados hospedados no MongoDB Atlas, você pode oferecer suporte à pesquisa de texto completo com índices Atlas Search. Para saber mais, consulte Criar um Índice do Atlas Search.

Para implantações autogerenciadas (não Atlas), o MongoDB fornece um tipo de índice text que suporta a pesquisa de conteúdo de cadeia de caracteres em uma coleção. Para saber mais sobre índices de texto autogerenciados, consulte Índices de texto.

Para usar um índice para comparações de strings, uma operação também deve especificar o mesmo agrupamento. Ou seja, um índice com ordenação não pode suportar uma operação que executa comparações de strings nos campos indexados se a operação especificar uma ordenação diferente.

Aviso

Porque os índices configurados com agrupamento usam ICU. chaves de agrupamento para obter a ordem de classificação, chaves de índice com reconhecimento de agrupamento pode ser maior do que as chaves de índice para índices sem agrupamento.

Por exemplo, a coleta myColl possui um índice em um campo de sequência category com o código do idioma de ordenação "fr".

db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

A seguinte operação de consulta, que especifica o mesmo agrupamento que o índice, pode usar o índice:

db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )

No entanto, a seguinte operação de consulta, que por padrão usa o agrupador binário "simples", não pode usar o índice:

db.myColl.find( { category: "cafe" } )

Para um índice composto em que as chaves de prefixo do índice não são strings, matrizes e documentos incorporados, uma operação que especifica um agrupamento diferente ainda pode usar o índice para dar suporte a comparações nas chaves de prefixo do índice.

Por exemplo, a coleta myColl possui um índice composto nos campos numéricos score e price e no campo de string category; o índice é criado com a localidade de ordenação "fr" para comparações de strings:

db.myColl.createIndex(
{ score: 1, price: 1, category: 1 },
{ collation: { locale: "fr" } } )

As operações a seguir, que usam agrupamento binário "simple" para comparações de strings, podem usar o índice:

db.myColl.find( { score: 5 } ).sort( { price: 1 } )
db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )

A operação a seguir, que usa agrupamento binário "simple" para comparações de strings no campo category indexado, pode usar o índice para preencher apenas a parte score: 5 da query:

db.myColl.find( { score: 5, category: "cafe" } )

Importante

As correspondências com chaves de documentos, incluindo chaves de documentos incorporadas, usam uma comparação binária simples. Isto significa que uma query para uma chave como "foo.bár" não corresponderá à chave "foo.bar", independente do valor definido para o parâmetro de força.

← A regra ESR (igualdade, classificação, intervalo)