Remover índices desnecessários
Visão geral
Índices oferecem suporte à execução eficiente de queries no MongoDB. No entanto, cada índice criado tem um impacto negativo no desempenho em gravações e exige algum espaço em disco.
A criação de índices desnecessários leva a uma coleção inchada e gravações lentas. Considere cada query que seu aplicativo executa e se ela justifica um índice. Remova os índices que não são usados, porque o campo não é usado para executar a query no banco de dados ou porque o índice é redundante.
Você deve identificar e eliminar índices desnecessários. Use o Data Explorer para gerenciar índices no MongoDB Ops Manager.
Exemplo
Considere um jogo que premie coins
para os jogadores. Quando um jogador atinge 20 coins
, esse jogador ganha 1 star
e seus coins
são redefinidos para 0. O jogo tem uma coleção players
com documentos como os seguintes:
// players collection { "_id": "ObjectId(123)", "first_name": "John", "last_name": "Doe", "coins": 11, "stars": 2 }
A coleção players
tem um índice para cada campo:
_id
é indexado por padrão.{ last_name: 1 }
{ last_name: 1, first_name: 1 }
{ coins: -1 }
{ stars: -1 }
last_name
Index
Neste exemplo, quando o jogo consulta o banco de dados em busca de informações do jogador, ele encontra um único registro usando o nome completo de um jogador. O índice composto { last_name: 1,
first_name: 1 }
cobre este caso, então o jogo deve largar o índice { last_name: 1 }
porque é redundante.
coins
Index
Neste exemplo, o campo coins
nunca é usado para procurar no banco de dados. O jogo deve eliminar o índice { coins: -1 }
porque ele não está sendo usado.
stars
Index
Neste exemplo, no final de um jogo, os nomes dos jogadores são exibidos em uma tabela de classificação em ordem decrescente por número de estrelas. O jogo deve manter o índice { stars: -1 }
, mesmo que seja usado com pouca frequência, para evitar a digitalização de todos os documentos da coleção players
.
Agora, o jogo usa os seguintes índices:
_id
é indexado por padrão.{ last_name: 1, first_name: 1 }
{ stars: -1 }
Após eliminar índices desnecessários, a coleção players
tem mais espaço livre e pode executar gravações mais rápidas. As leituras mais frequentes não sofrem uma queda no desempenho porque os índices que suportam essas leituras ainda existem na coleção.
Identifique e elimine índices desnecessários
Para identificar índices desnecessários no Ops Manager, visualize índices com a chave de criptografia de dados (DEK).
Na guia Indexes no Explorador de Dados, você pode visualizar Size, Usage e outras informações para cada um dos seus índices. Se um índice não for usado ou for coberto por outro índice, você deve descartá-lo.
Para eliminar um índice no Ops Manager, descarte um índice com a chave de criptografia de dados (DEK).
Saiba mais
Para saber mais sobre índices, consulte Índices.
Para saber mais sobre indexação para seu caso de uso, consulte Indexando Estratégias.
O MongoDB também oferece um curso gratuito da MongoDB University para melhorar o desempenho do banco de dados, incluindo a otimização de índices: Monitoramento e insights.