Crie índices para oferecer suporte a suas queries
Nesta página
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.
Sobre esta tarefa
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.
Passos
Identificar queries comuns
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.
Criar índices para dar suporte a queries comuns
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 .
Analisar o uso do índice
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.
Exemplos
Criar um índice de chave única
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" } )
Criar um índice composto
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 } )
Prefixos de índices
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.
Crie índices para dar suporte à pesquisa de texto
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.
Crie índices de Vector Search
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.
Uso do Índice e Agrupamento
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.