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

Crie índices para oferecer suporte a suas queries

Nesta página

  • Sobre esta tarefa
  • Passos
  • Exemplos
  • Saiba mais

Um índice cobre uma query quando o índice contém todos os campos verificados pela query. Uma query coberta analisa o índice e não a collection, o que melhora o desempenho da query.

Os índices também podem suportar parcialmente queries se um subconjunto dos campos consultados for indexado.

Uma única collection pode ter um máximo de 64 índices. No entanto, muitos índices podem degradar o desempenho antes que esse limite seja atingido. Para coletas com alta taxa de gravação para leitura, os índices podem degradar o desempenho porque cada inserção também deve atualizar quaisquer índices.

1

Para identificar padrões de query comuns em seu aplicação, use o estágio de agregação $queryStats . $queryStats reporta métricas para formas de query, que agrupam queries com base em campos compartilhados.

2

Depois de saber quais campos seu aplicação consulta com frequência, você pode criar índices para dar suporte a consultas nesses campos. Para mais informações, consulteExemplos do .

3

Depois que seu aplicação começar a usar índices, você poderá analisar a eficácia dos índices. Para ver as estatísticas e o uso do índice, você pode:

  • Use o estágio de agregação $indexStats .

  • Para MongoDB Atlas , visualize índices na interface do usuário do Atlas .

Considere excluir índices não utilizados para melhorar o desempenho do aplicação . Para mais informações, consulte Remover índices desnecessários.

Repita este procedimento periodicamente para garantir que seus índices suportem seu volume de trabalho atual.

Se seu aplicação consultar somente uma única chave em uma determinada coleta, você precisará criar um índice de chave única para essa coleta. Por exemplo, você pode criar um índice em category na coleção product :

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

O índice anterior suporta esta query:

db.products.find( { category: "electronics" } )

Se seu aplicação executar queries em uma única chave e em várias chaves, um índice composto será mais eficiente do que um índice de chave única. Por exemplo, você pode criar um índice nos campos category, item e location :

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

Um índice composto suporta queries sobre prefixos de índice, que são os subconjuntos iniciais de campos indexados. Por exemplo, o índice anterior suporta estas queries:

db.products.find( { category: "electronics" } )
db.products.find( { category: "electronics", item: "television" } )

Para obter mais informações e considerações de desempenho sobre prefixos de índice, consulte Prefixos de índice.

Para dados hospedados no MongoDB Atlas, você pode oferecer suporte à Full Text Search 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 string de caracteres em uma coleção. Para saber mais sobre índices de texto autogerenciados, consulte Índices de texto em implantações autogerenciadas.

Os índices de Vector Search oferecem suporte a queries sobre incorporações vetoriais. Para criar índices de Vector Search , consulte Campos de índice para Vector Search.

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.

Voltar

Aplicar padrões