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

Índices

Nesta página

  • Casos de uso
  • Começar
  • Detalhes
  • Índice _id padrão
  • Crie um índice
  • Tipos de índice
  • Propriedades do índice
  • Uso do índice
  • Índices e agrupamento
  • Queries cobertas
  • Interseção de índice
  • Restrições
  • Considerações adicionais

Os índices suportam a execução eficiente de consultas no MongoDB. Sem índices, o MongoDB deve verificar todos os documentos de uma coleção para retornar resultados de consulta. Se existir um índice apropriado para uma consulta, o MongoDB usa o índice para limitar o número de documentos que deve digitalizar.

Embora os índices melhorem o desempenho da consulta, adicionar um índice tem impacto negativo no desempenho para operações de gravação. Para coleções com alta taxa de gravação para leitura, os índices são caros porque cada inserção também deve atualizar quaisquer índices.

Se seu aplicativo estiver executando consultas repetidamente nos mesmos campos, poderá criar um índice nesses campos para melhorar o desempenho. Por exemplo, considere os seguintes cenários:

Cenário
Tipo de índice
Um departamento de recursos humanos geralmente precisa procurar funcionários pelo ID do funcionário. Você pode criar um índice no campo ID do funcionário para o desempenho da consulta.
Índice de campo único

Muitas vezes, um vendedor precisa procurar informações do cliente por localização. A localização é armazenada em um objeto incorporado com campos como state, city e zipcode. Você pode criar um índice no objeto location para melhorar o desempenho das consultas neste objeto.

Observação

Ao criar um índice em um documento incorporado, somente as consultas que especificam todo o documento incorporado utilizam o índice. Consultas em um campo específico do documento não usam o índice.

Índice de campo único em um documento incorporado
Um gerente de mercearia geralmente precisa pesquisar itens de estoque por nome e quantidade para determinar quais itens estão com pouco estoque. É possível criar um único índice nos campos item e quantity para melhorar o desempenho da consulta.

Você pode criar e gerenciar índices no MongoDB Atlas, com um método de driver ou com o MongoDB Shell. MongoDB Atlas é o serviço totalmente gerenciado para implementações MongoDB na nuvem.

Para implantações hospedadas no MongoDB Atlas, você pode criar e gerenciar índices com a IU do MongoDB Atlas ou a CLI do Atlas. O MongoDB Atlas também inclui um Performance Advisor que recomenda índices para melhorar consultas lentas, classifica os índices sugeridos por impacto e recomenda quais índices devem ser descartados.

Para aprender como criar e gerenciar índices na IU do MongoDB Atlas ou Atlas CLI, consulte Criar, Exibir, Descartar e Ocultar Índices..

Para saber mais sobre o MongoDB Atlas Performance Advisor, consulte Monitorar e melhorar queries lentas.

Você pode criar e gerenciar índices com um método de driver ou o MongoDB Shell. Para saber mais, consulte os recursos nesta página.

Índices são estruturas de dados especiais que armazenam uma pequena parte do conjunto de dados da coleção em um formato fácil de percorrer. Os índices do MongoDB usam uma estrutura de dados B-tree.

O índice armazena o valor de um campo específico ou conjunto de campos, ordenado pelo valor do campo. A ordenação das entradas do índice suporta correspondências de igualdade eficientes e operações de consulta baseadas em intervalo. Além disso , o MongoDB pode retornar resultados classificados usando a ordenação no índice.

O diagrama a seguir ilustra uma consulta que seleciona e ordena os documentos correspondentes usando um índice:

Diagrama de uma query que usa um índice para selecionar e retornar resultados ordenados. O índice armazena valores de ``score`` em ordem crescente. O MongoDB pode percorrer o índice em ordem crescente ou decrescente para retornar resultados ordenados.
clique para ampliar

Fundamentalmente, os índices no MongoDB são semelhantes aos índices de outros sistemas de reconhecimento de data center. O MongoDB define índices no nível de collection e suporta índices em qualquer campo ou subcampo dos documentos em uma collection do MongoDB.

O MongoDB cria um índice único no campo _id durante a criação de uma collection. O índice _id impede que os clientes insiram dois documentos com o mesmo valor para o campo _id . Você não pode descartar esse índice no campo _id .

Observação

Em clusters fragmentados, se você não usar o campo _id como a chave de shard, seu aplicativo deverá garantir a exclusividade dos valores no campo _id para evitar erros. Na maioria das vezes, isso é feito usando um ObjectId padrão gerado automaticamente.


➤ Use o menu suspenso Selecione a linguagem no canto superior direito para definir a linguagem dos exemplos nesta página.


[1] Os índices MongoDB usam uma estrutura de dados B-tree

O nome padrão de um índice é a concatenação das chaves indexadas e da direção de cada chave no índice (ou seja, 1 ou -1) usando sublinhados como separadores. Por exemplo, um índice criado em { item : 1, quantity: -1 } tem o nome item_1_quantity_-1.

Você pode criar índices com um nome personalizado, como um que seja mais legível do que o padrão. Por exemplo, considere um aplicativo que consulta frequentemente a coleta products para preencher dados no inventário existente. O método createIndex() a seguir cria um índice em item e quantity chamado query for inventory :

db.products.createIndex(
{ item: 1, quantity: -1 } ,
{ name: "query for inventory" }
)

Você pode visualizar nomes de índice utilizando o método db.collection.getIndexes() . Você não pode renomear um índice depois de criado. Em vez disso, você deve descartar e recriar o índice com um novo nome.

O MongoDB fornece vários tipos de índices que dão suporte a tipos específicos de dados e queries.

Além do índice _id definido pelo MongoDB, o MongoDB suporta a criação de índices ascendentes/descendentes definidos pelo usuário em um único campo de um documento.

Diagrama de um índice no campo ``score`` (crescente).

Para um índice de campo único e operações de classificação, a ordem de classificação (ou seja, ascendente ou descendente) da chave do índice não importa porque MongoDB pode percorrer o índice em qualquer direção.

Consulte Índices de Campo Único e Classificar com um Índice de Campo Único para obter mais informações sobre índices de campo único.

O MongoDB também suporta índices definidos pelo usuário em vários campos, ou seja , índices compostos.

A ordem dos campos listados em um índice composto é significativa. Por exemplo, se um índice composto consiste em { userid: 1, score: -1 } , o índice classifica primeiro por userid e depois, dentro de cada valor userid , classifica por score .

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``.

Para índices compostos e operações de classificação, a ordem de classificação (ou seja, ascendente ou descendente) das chaves do índice pode determinar se o índice pode suportar uma operação de classificação. Consulte Ordem de classificação para obter mais informações sobre o impacto da ordem do índice nos resultados em índices compostos.

Veja também:

O MongoDB usa índices de múltiplas chaves para indexar o conteúdo armazenado em arrays. Se você indexar um campo que contém um valor de array, o MongoDB criará entradas de índice separadas para cada elemento exclusivo do array. Esses índices de várias chaves permitem que as query selecionem documento que contêm matrizes combinando um elemento ou elementos das matrizes. O MongoDB determina automaticamente se deve ser criado um índice de múltiplas chaves se o campo indexado contiver um valor de array; você não precisa especificar explicitamente o tipo de múltiplas chaves.

Diagrama de um índice multichave no ``addr.zip`` campo. O campo ``addr`` contém uma array de documentos de endereço. Os documentos de endereço contêm o campo ``zip``.

Consulte Índices de múltiplas chaves e Limites de índices de múltiplas chaves para obter mais informações sobre índices de múltiplas chaves.

Para suportar consultas eficientes de dados de coordenadas geoespaciais, MongoDB fornece dois índices especiais: índices 2d que utilizam geometria planar ao retornar resultados e índices 2dsphere que utilizam geometria esférica para retornar resultados.

Este índice é um índice esparso. Se você deseja utilizar um índice esparso para criar um índice composto, primeiro revise as considerações especiais de utilizar índices compostos esparsos.

Consulte Índices geoespaciais para uma introdução de alto nível aos índices geoespaciais.

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.

Este índice é um índice esparso. Se você deseja utilizar um índice esparso para criar um índice composto, primeiro revise as considerações especiais de utilizar índices compostos esparsos.

Para oferecer suporte à fragmentação baseada em hash, o MongoDB fornece um tipo de índice hash , que indexa o hash do valor de um campo. Esses índices têm uma distribuição mais aleatória de valores ao longo de seu intervalo, mas suportam apenas correspondência de igualdade e não podem suportar query baseadas em intervalo.

A partir do MongoDB 5.3, você pode criar uma collection com um índice agrupado. As collections criadas com um índice clusterizado são chamadas de collections clusterizadas.

Consulte clustered collection.

A partir do MongoDB 4.2, você pode usar índices curinga para oferecer suporte a query em campo múltiplos, arbitrários ou desconhecidos. Ao criar um índice curinga, você especifica $** para representar todos os campos ou todos os valores, permitindo indexar qualquer um dos itens a seguir com um único comando:

  • Todos os valores de um campo

  • Todos os campos de um documento

  • Todos os campo de um documento, exceto caminho do campo específicos

  • Vários campos específicos em um documento

Para saber mais, consulte Índices curinga.

A propriedade única de um índice faz com que MongoDB rejeite valores duplicados para o campo indexado. Além da restrição exclusiva, os índices únicos são funcionalmente intercambiáveis com outros índices do MongoDB.

Os índices parciais indexam apenas os documentos em uma collection que atendem a uma expressão de filtro especificada. Ao indexar um subconjunto de documentos em uma collection, os índices parciais têm requisitos de armazenamento mais baixos e custos de desempenho reduzidos para criação e manutenção de índices.

Os índices parciais oferecem um superconjunto da funcionalidade dos índices esparsos e devem ser preferidos aos índices esparsos.

A propriedade esparsa de um índice garante que o índice contenha apenas entradas para documentos que tenham o campo indexado. O índice ignora documentos que não possuem o campo indexado.

Você pode combinar a opção de índice esparso com a opção de índice exclusivo para evitar a inserção de documentos que possuem valores duplicados para o (s) campo(s) indexado(s) e ignorar a indexação de documentos que não possuem o(s) campo(s) indexado(s).

Os índices TTL são índices especiais que o MongoDB pode usar para remover automaticamente documento de uma collection após um determinado período de tempo. Isso é ideal para determinados tipos de informações como dados de evento gerados por máquina, logs e informações de sessão, que só precisam persistir em um reconhecimento de data center por um período de tempo finito.

Consulte: Expirar dados de coleções configurando TTL para obter instruções de implementação.

Novidades na versão 4.4.

Os índices ocultos não são visíveis para o planejador de query e não podem ser usados para dar suporte a uma query.

Ao ocultar um índice do planejador, os usuários podem avaliar o impacto do descarte de um índice sem realmente descartá-lo. Se o impacto for negativo, o usuário poderá exibir o índice em vez de recriar um índice descartado. E, como os índices são totalmente mantidos enquanto estão ocultos, eles ficam imediatamente disponíveis para uso quando são exibidos.

Exceto o índice _id , você pode ocultar qualquer índice.

Os índices podem melhorar a eficiência das operações de leitura. O tutorial Analisar o Desempenho da query fornece um exemplo das estatísticas de execução de uma query com e sem um índice.

Para obter informações sobre como o MongoDB escolhe um índice para usar, consulte otimizador de query.

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

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.

Para obter mais informações sobre agrupamento, consulte a página de referência de agrupamento.

Os índices a seguir oferecem suporte apenas à comparação binária simples e não oferecem suporte ao agrupamento:

Quando os critérios de consulta e a projeção de uma consulta incluem apenas os campos indexados, o MongoDB retorna resultados diretamente do índice sem digitalizar documentos ou trazê-los para a memória. Essas query cobertas podem ser muito eficientes.

Diagrama de uma consulta que usa somente o índice para corresponder aos critérios da consulta e retornar os resultados. O MongoDB não precisa inspecionar dados fora do índice para atender à query.
clique para ampliar

Para mais informações sobre query cobertas, consulte query Coberta.

MongoDB pode usar a interseção de índices para atender às query. Para query que especificam condições de query compostas, se um índice puder atender uma parte de uma condição de query e outro índice puder atender outra parte da condição de query, então o MongoDB poderá usar a interseção dos dois índices para atender a query. Se o uso de um índice composto ou de uma interseção de índice é mais eficiente depende da query e do sistema.

Para obter detalhes sobre a interseção do índice, consulte Interseção do índice.

Certas restrições se aplicam aos índices, como o comprimento das chaves do índice ou o número de índices por collection. Consulte Limitações de Índice para obter detalhes.

Embora os índices possam melhorar o desempenho das consultas, os índices também apresentam algumas considerações operacionais. Consulte Considerações operacionais para índices para obter mais informações.

Durante a criação de índices, os aplicativos podem encontrar desempenho reduzido ou acesso limitado de leitura/gravação à coleção que está sendo indexada.

Para obter mais informações sobre o processo de construção de índices, consulte Construções de índices em collection preenchidas, especialmente a seção Construções de índices em ambientes replicados .

Alguns drivers usam NumberLong(1) em vez de 1 para especificar a ordem do índice. Os índices resultantes são os mesmos.

← Map-reduce para aggregation pipeline