FAQ: Indexes
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.
Como crio um índice?
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 índice 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.
Como uma construção de índice afeta o desempenho do banco de dados?
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.
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.
Como faço para monitorar o progresso da criação do índice?
Para retornar informações sobre as operações de criação de índices atualmente em execução, consulte Operações de indexação ativas.
Como faço para encerrar uma construção de índice?
Para encerrar uma construção de índice em andamento, use db.collection.dropIndex()
ou seus assistentes de shell dropIndex() ou dropIndexes
. Não use db.killOp()
para encerrar construçõ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 descartar o índice no primário. O primário interrompe a construçã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 o trabalho de construção.
Para saber mais, consulte Cancelar compilações de índice em andamento.
Como vejo quais índices existem em uma coleção?
Para listar os índices de uma coleção, utilize o método db.collection.getIndexes()
.
Como posso ver se uma query usa um índice?
Para inspecionar como o MongoDB processa uma query, utilize o método explain()
.
Como determino quais campos indexar?
Vários fatores determinam quais campos indexar, incluindo seletividade e suporte para várias formas de query. Para obter mais informações, consulte Considerações operacionais para índices e Estratégias de indexação.
Como posso ver o tamanho de um índice?
O db.collection.stats()
inclui um documento do indexSizes
que fornece informações de tamanho para cada índice na coleção.
Como as operações de escrita afetam os índices?
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.
Como os dados aleatórios impactam o desempenho do índice?
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.