Database Management

Dominando Índices Compostos no MongoDB

Spread the love

Dominando Índices Compostos no MongoDB

Este guia mergulha nas intrincadas nuances dos índices compostos no MongoDB, uma técnica crucial para otimizar o desempenho do banco de dados. Abordaremos tudo, desde a compreensão de seu funcionamento fundamental até a análise de sua eficácia e a solução de problemas comuns.

  1. Entendendo Índices Compostos
  2. Criando Índices Compostos
  3. Consultando com Índices Compostos
  4. Analisando o Uso de Índices
  5. Melhores Práticas e Otimização
  6. Perguntas Frequentes

1. Entendendo Índices Compostos

No MongoDB, um índice composto é um índice que abrange múltiplos campos dentro de um único documento. Diferentemente dos índices de campo único, que apenas aceleram consultas em um único campo, os índices compostos aumentam dramaticamente a velocidade de consultas envolvendo múltiplos campos, impactando significativamente o desempenho da aplicação. A ordem dos campos dentro do índice é crítica; o MongoDB utiliza essa ordem para localizar documentos eficientemente.

Consultas que correspondem aos campos iniciais do índice obtêm o maior benefício. Se uma consulta usa apenas os campos iniciais, o índice é totalmente utilizado tanto para filtragem quanto para ordenação. No entanto, se uma consulta usa campos além do índice, o MongoDB pode utilizar parcialmente o índice, potencialmente recorrendo a uma varredura da coleção para os critérios restantes, negando os ganhos de desempenho.

Por exemplo, considere uma coleção products com os campos category, price e name. Um índice composto em { "category": 1, "price": -1 } otimiza consultas filtrando por category e, em seguida, ordenando por price em ordem decrescente.

2. Criando Índices Compostos

Criar índices compostos é simples usando o método db.collection.createIndex(). O argumento é um documento onde as chaves representam os nomes dos campos e os valores representam a ordem de classificação (1 para ascendente, -1 para descendente).


// Criar um índice composto em category (ascendente) e price (descendente)
db.products.createIndex( { category: 1, price: -1 } );

// Criar um índice composto em múltiplos campos, com ordens de classificação variadas
db.users.createIndex( { firstName: 1, lastName: -1, age: 1 } );

// Adicionar opções unique e sparse
db.products.createIndex( { category: 1, price: -1 }, { unique: true, sparse: true } );

unique: true impõe unicidade nos campos indexados, enquanto sparse: true indexa apenas documentos onde os campos indexados não são nulos.

3. Consultando com Índices Compostos

O otimizador de consultas do MongoDB utiliza automaticamente um índice composto se a consulta corresponder aos campos iniciais e a ordem de classificação estiver alinhada. Por exemplo, a seguinte consulta se beneficia do índice { "category": 1, "price": -1 }:


db.products.find( { category: "Electronics" } ).sort( { price: -1 } );

Esta consulta filtra por category (o campo de índice inicial) e ordena por price (correspondendo à ordem de classificação do índice). No entanto, esta consulta não se beneficiaria tanto:


db.products.find( { price: { $lt: 100 } } ).sort( { category: 1 } );

price não é o campo inicial, e a ordem de classificação não está alinhada com o índice.

4. Analisando o Uso de Índices

Use db.collection.find().explain() para analisar o uso do índice. Isso fornece informações detalhadas sobre o plano de execução da consulta, incluindo quais índices foram usados (ou não) e os tempos de execução.


db.products.find( { category: "Electronics" } ).sort( { price: -1 } ).explain();

Examine a seção “executionStats”. Se o índice for usado, você verá o uso da chave do índice e o número de documentos examinados. “COLLSCAN” indica uma varredura completa da coleção, menos eficiente que o uso do índice.

5. Melhores Práticas e Otimização

A seleção cuidadosa do índice é crucial. O excesso de indexação diminui as operações de gravação, enquanto a sub-indexação leva a consultas ineficientes. Priorize os padrões de consulta usados com frequência, adicionando índices incrementalmente conforme necessário. Monitore o uso do índice regularmente e ajuste com base nas necessidades do aplicativo. Considere usar a interface gráfica do MongoDB Compass para um gerenciamento de índice mais simples.

6. Perguntas Frequentes

  • Quantos índices compostos devo criar? O número ideal depende dos padrões de consulta do seu aplicativo. É necessário um equilíbrio para evitar o excesso de indexação.
  • E se minha consulta não corresponder perfeitamente ao índice? O MongoDB pode usar partes do índice, mas ainda pode recorrer a uma varredura da coleção para as partes não correspondentes.
  • Posso criar índices compostos com campos ascendentes/descendentes mistos? Sim, a ordem é crucial para o desempenho ideal.
  • Como excluir um índice composto? Use db.collection.dropIndex(), especificando o nome do índice ou a especificação:

// Excluir pelo nome
db.products.dropIndex("category_1_price_-1");

// Excluir pela especificação
db.products.dropIndex( { category: 1, price: -1 } );

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *