As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Índice composto com mais de 3 atributos
Visão geral do
Um índice composto ou composto mantém referências a vários campos em uma única estrutura de índice. Esses índices otimizam o desempenho de consultas que filtram em vários campos simultaneamente ou combinam filtragem com operações de classificação. Eles também são eficazes para consultas de condição única nos campos indexados mais à esquerda. O banco de dados aproveita essas entradas de índice para localizar com eficiência os documentos correspondentes sem realizar digitalizações completas da coleção.
O Amazon DocumentDB pode usar o índice composto para oferecer suporte a consultas que incluam qualquer subconjunto principal dos campos indexados, um conceito conhecido como prefixos de índice. Por exemplo, se você tem um índice composto ativado{state: 1, city: 1, zipcode: 1}, o Amazon DocumentDB pode processar com eficiência consultas que usam somente o campo 'estado', os campos 'estado' e 'cidade' juntos, ou todos os três campos 'estado', 'cidade' e 'CEP”. No entanto, as consultas devem usar os campos da esquerda para a direita sem ignorar nenhum campo intermediário. Isso significa que consultas usando somente o campo 'cidade' ou 'CEP', ou combinações como 'estado' e 'CEP' (ignorando 'cidade'), não podem utilizar totalmente o índice.
Na maioria dos cenários do mundo real, índices compostos com três ou menos atributos normalmente alcançam desempenho e eficiência de recursos ideais. Embora seja possível ter mais de 3 atributos no índice composto, isso geralmente leva ao aumento do consumo de recursos, superando os benefícios.
Impacto no cluster
Embora seja tentador criar um índice cobrindo todas as condições em uma consulta para obter o máximo desempenho teórico, a maior parte da filtragem de dados ocorre por meio dos primeiros 1-3 atributos em um índice composto. Campos adicionais além desse limite contribuem principalmente para o tamanho do índice, em vez de uma otimização significativa da consulta.
Armazenamento e I/O sobrecarga: índices compostos com muitos atributos consomem muito mais espaço de armazenamento do que alternativas mais simples. O tamanho é diretamente proporcional ao número de atributos indexados e ao tamanho dos próprios valores indexados.
Espaço de memória: o grande espaço de armazenamento de índices compostos com muitos atributos cria um espaço correspondente na memória, aumentando seu conjunto de trabalho e deslocando outros dados acessados com frequência do buffer pool.
Operações de gravação: cada modificação do documento que afeta vários campos indexados exige a atualização de toda a entrada do índice composto, multiplicando o trabalho necessário para concluir a operação de gravação.
Como identificar
Comece analisando todos os índices em sua coleção para identificar índices compostos com mais de três atributos:
// List all indexes for the collection db.collection.getIndexes() // Look for indexes with 3+ fields like: // { "userId": 1, "status": 1, "category": 1, "priority": 1, "region": 1 } // { "orderId": 1, "customerId": 1, "productId": 1, "timestamp": 1, "warehouse": 1 }
Correção
Se um índice composto com mais de três atributos estiver sendo usado, identifique as consultas que o utilizam e procure oportunidades de otimização. Considere substituir esses índices por outros mais eficientes contendo três ou menos atributos. Depois de implementar os novos índices, remova os índices antigos que contêm mais de três atributos.
nota
Sempre coordene com as partes interessadas e valide o impacto no desempenho antes de descartar qualquer índice.
Siga a regra Equality, Sort, Range (ESR) ao criar índices compostos.
Regra de faixa de classificação de igualdade (ESR): essa ordenação maximiza a eficiência do índice filtrando o conjunto de dados primeiro com condições de igualdade, depois aplicando operações de classificação no conjunto reduzido e, finalmente, realizando varreduras de faixa no menor subconjunto possível
-
campos de ordem como igualdade (correspondências exatas),
-
Classificar (ordenar),
-
Intervalo (>, <, $in).
// Query pattern db.orders.find({ userId: "user123", // Equality price: { $gte: 50, $lte: 200 } // Range }).sort({ createdAt: -1 }) // Sort // Optimal index following ESR rule db.orders.createIndex({ userId: 1, createdAt: -1, price: 1 }) // Equality Sort Range