Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

FAQ: Índices

Nesta página

  • Como crio um índice?
  • Como uma construção de índice afeta o desempenho do banco de dados?
  • Como faço para monitorar o progresso da criação do índice?
  • Como faço para encerrar uma construção de índice?
  • Como vejo quais índices existem em uma coleção?
  • Como posso ver se uma query usa um índice?
  • Como determino quais campos indexar?
  • Como posso ver o tamanho de um índice?
  • Como as operações de escrita afetam os índices?
  • Como os dados aleatórios impactam o desempenho do índice?

Este documento aborda algumas perguntas comuns sobre índices MongoDB. Para obter mais informações sobre índices, consulte Índices.

Para criar um índice em uma coleção, utilize o método db.collection.createIndex(). Criar um índice é uma operação administrativa. Em geral, os aplicativos não devem ligar para db.collection.createIndex() regularmente.

Observação

As construções de índices podem afetar o desempenho; consulte Como uma construção de índice afeta o desempenho do banco de dados?. Os administradores devem considerar as implicações de desempenho antes de criar índices.

As compilações de índice do MongoDB em uma coleção preenchida exigem um bloqueio exclusivo de leitura-gravação na coleção. As operações que exigem um bloqueio de leitura ou gravação na coleção devem aguardar até que o mongod libere o bloqueio.

Alterado na versão 4,2.

  • Para a versão de compatibilidade de recursos (fcv) "4.2", o MongoDB usa um processo de construção otimizado que contém apenas o bloqueio exclusivo no início e no final da construção do índice. O restante do processo de construção resulta em operações intercaladas de leitura e gravação.

  • Para versão de compatibilidade de recursos (fcv) "4.0", o processo de construção de índice de primeiro plano padrão mantém o bloqueio exclusivo para toda a construção de índice. background compilações de índice não recebem bloqueio exclusivo durante o processo de compilação.

Para obter mais informações sobre o processo de criação de índices, consulte Construções de índices em coleções preenchidas.

As compilações de índices em conjuntos de réplicas têm considerações e riscos específicos de desempenho. Consulte Index Builds in Replicated Environments para mais informações. Para minimizar o impacto da criação de um índice em conjuntos de réplicas, incluindo conjuntos de réplicas de shards, use um procedimento de criação de índice contínuo, conforme descrito em Criação de índices contínuos em conjuntos de réplicas.

Para retornar informações sobre as operações de criação de índices atualmente em execução, consulte Operações de indexação ativas.

Para encerrar uma construção de índice em andamento, use db.collection.dropIndex() ou seus auxiliares de shell dropIndex() ou dropIndexes. Não use db.killOp() para encerrar compilações de índices em andamento em conjuntos de réplicas ou clusters fragmentados.

Você não pode encerrar uma compilação de índice replicado em membros secundários de um conjunto de réplicas. Você deve primeiro eliminar o índice no primário. O primário interrompe a criação do índice e cria uma entrada de oplog abortIndexBuild associada. Os segundários que replicam a entrada de oplog do abortIndexBuild param a construção do índice em andamento e descartam a tarefa de construção.

Para saber mais, consulte Interromper compilações de índice em andamento.

Para listar os índices de uma coleção, utilize o método db.collection.getIndexes().

Para inspecionar como o MongoDB processa uma query, utilize o método explain().

Vários fatores determinam quais campos indexar, incluindo seletividade, suporte para várias formas de query e tamanho do índice. Para obter mais informações, consulte Considerações operacionais para índices e Estratégias de indexação.

O db.collection.stats() inclui um documento do indexSizes que fornece informações de tamanho para cada índice na coleção.

Dependendo do seu tamanho, um índice pode não caber na RAM. Um índice se encaixa na RAM quando seu servidor tem RAM suficiente disponível para o índice e o restante do conjunto de trabalho. Quando um índice é muito grande para caber na RAM, MongoDB deve ler o índice do disco, que é uma operação muito mais lenta do que a leitura da RAM.

Em certos casos, um índice não precisa caber inteiramente na RAM. Para obter detalhes, consulte Índices que contêm apenas valores recentes na RAM.

As operações de gravação podem exigir atualizações nos índices:

  • Se uma operação de gravação modificar um campo indexado, o MongoDB atualizará todos os índices que têm o campo modificado como uma chave.

Portanto, se seu aplicativo tiver muitas gravações, os índices poderão afetar o desempenho.

Se uma operação insere uma grande quantidade de dados aleatórios (por exemplo, índices com hash) em um campo indexado, o desempenho da inserção pode diminuir. Inserções em massa de dados aleatórios criam entradas de índice aleatórias, o que aumenta o tamanho do índice. Se o índice atingir o tamanho que requer cada inserção aleatória para acessar uma entrada de índice diferente, as inserções resultarão em uma alta taxa de remoção e substituição do cache WiredTiger. Quando isso acontece, o índice não está mais totalmente no cache e é atualizado no disco, o que diminui o desempenho.

Para melhorar o desempenho de inserções em massa de dados aleatórios em campos indexados, você pode:

  • Soltar o índice e recriá-o depois de inserir os dados aleatórios.

  • Insira os dados em uma coleção não indexada vazia.

A criação do índice após a inserção em massa classifica os dados na memória e executa uma inserção ordenada em todos os índices.

← Perguntas frequentes: Fundamentos do MongoDB