Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os campos que podem ser consultados sempre devem ter índices criados
Operações de leitura com base em predicados e agregados consultam o índice para aplicar os filtros correspondentes. Na ausência de índices, o mecanismo de banco de dados executa uma verificação de documento para recuperar os documentos correspondentes. As verificações são sempre caras e ficam progressivamente mais caras à medida que o volume de dados em uma coleção aumenta. Para um desempenho de consulta ideal, os índices sempre devem ser criados para todos os campos que podem ser consultados.
Evite índices desnecessários e indexação de todos os campos por padrão
Os índices devem ser criados apenas para campos que podem ser consultados. A indexação curinga deve ser usada somente quando os padrões de consulta são imprevisíveis, em que qualquer campo na estrutura do documento pode fazer parte dos filtros de consulta.
Dica
O Azure DocumentDB indexa apenas o campo _id por padrão. Todos os outros campos não são indexados por padrão. Os campos a serem indexados devem ser planejados antecipadamente para maximizar o desempenho da consulta, minimizando o impacto nas gravações da indexação de muitos campos.
Quando um novo documento é inserido pela primeira vez ou um documento existente é atualizado ou excluído, cada um dos campos especificados no índice também é atualizado. Se a política de indexação contiver um grande número de campos (ou todos os campos no documento), mais recursos serão consumidos pelo servidor na atualização dos índices correspondentes. Ao executar em escala, somente os campos consultáveis devem ser indexados, enquanto todos os campos restantes não utilizados em predicados de consulta devem ser excluídos do índice.
Estratégia de indexação para ingestão eficiente de dados
Para migrações de carga de trabalho grandes para o Azure DocumentDB, é recomendável criar índices após a carga de dados para execução eficiente. Isso reduz significativamente a sobrecarga de gravação, minimiza o consumo de recursos e acelera o desempenho de ingestão de dados. A manutenção de índices durante a ingestão em massa pode deixar as inserções mais lentas, já que cada operação de gravação precisa atualizar todos os índices aplicáveis.
Para vários índices criados em dados históricos, emita comandos createIndex sem bloqueio para cada campo
Nem sempre é possível planejar todos os padrões de consulta antecipadamente, especialmente à medida que os requisitos de aplicativo evoluem. A alteração das necessidades do aplicativo inevitavelmente requer que os campos sejam adicionados ao índice em um cluster com uma grande quantidade de dados históricos.
Nesses cenários, cada comando createIndex deve ser emitido de forma assíncrona sem aguardar uma resposta do servidor.
Observação
Por padrão, o Azure DocumentDB responde a uma operação createIndex somente depois que o índice é totalmente compilado sobre dados históricos. Dependendo do tamanho do cluster e do volume de dados ingeridos, isso pode levar tempo e aparecer como se o servidor não estivesse respondendo ao comando createIndex.
Se os comandos createIndex estiverem sendo emitidos por meio do Shell do Mongo, use Ctrl + C para interromper o comando para parar de aguardar uma resposta e emitir o próximo conjunto de operações.
Observação
Usar Ctrl + C para interromper o comando createIndex depois que ele tiver sido emitido não encerra a operação de build de índice no servidor. Ele simplesmente impede que o Shell aguarde uma resposta do servidor, enquanto o servidor continua a criar o índice de forma assíncrona sobre os documentos existentes.
Criar índices compostos para consultas com predicados em vários campos
Índices compostos devem ser usados nos seguintes cenários:
- Consultas com filtros em vários campos
- Consultas com filtros em vários campos e com um ou mais campos classificados em ordem crescente ou decrescente
Considere o documento a seguir dentro do banco de dados 'cosmicworks' e da coleção 'employee'
{
"firstName": "Steve",
"lastName": "Smith",
"companyName": "Microsoft",
"division": "Azure",
"subDivision": "Data & AI",
"timeInOrgInYears": 7
}
Considere a seguinte consulta para localizar todos os funcionários com o sobrenome 'Smith' com a organização por mais de cinco anos:
db.employee.find({"lastName": "Smith", "timeInOrgInYears": {"$gt": 5}})
Um índice composto em 'lastName' e 'timeInOrgInYears' otimiza essa consulta:
use cosmicworks;
db.employee.createIndex({"lastName" : 1, "timeInOrgInYears" : 1})
Acompanhar o status de uma operação createIndex
Quando os índices são adicionados e os dados históricos precisam ser indexados, o progresso da operação de build de índice pode ser acompanhado usando db.currentOp().
Considere este exemplo para acompanhar o progresso da indexação no banco de dados 'cosmicworks'.
use cosmicworks;
db.currentOp()
Quando uma operação createIndex está em andamento, a resposta se parece com:
{
"inprog": [
{
"shard": "defaultShard",
"active": true,
"type": "op",
"opid": "30000451493:1719209762286363",
"op_prefix": 30000451493,
"currentOpTime": "2024-06-24T06:16:02.000Z",
"secs_running": 0,
"command": { "aggregate": "" },
"op": "command",
"waitingForLock": false
},
{
"shard": "defaultShard",
"active": true,
"type": "op",
"opid": "30000451876:1719209638351743",
"op_prefix": 30000451876,
"currentOpTime": "2024-06-24T06:13:58.000Z",
"secs_running": 124,
"command": { "createIndexes": "" },
"op": "workerCommand",
"waitingForLock": false,
"progress": {},
"msg": ""
}
],
"ok": 1
}
Habilitar chaves de índice grandes por padrão
Mesmo que os documentos não contenham chaves que tenham um grande número de caracteres ou que os documentos não contenham vários níveis de aninhamento, especificar chaves de índice grandes garante que esses cenários sejam cobertos. Agora, a chave de índice grande é o comportamento padrão do mecanismo.
Considere este exemplo para habilitar chaves de índice grandes na coleção 'large_index_coll' no banco de dados 'cosmicworks'.
use cosmicworks;
db.runCommand(
{
"createIndexes": "large_index_coll",
"indexes": [
{
"key": { "ikey": 1 },
"name": "ikey_1",
"enableLargeIndexKeys": true
}
]
})
Priorizando construções de índice em relação a novas operações de gravação usando a opção de bloqueio
Para cenários em que o índice deve ser criado antes que os dados sejam carregados, a opção de bloqueio deve ser usada para bloquear gravações de entrada até que o build do índice seja concluído.
A configuração { "blocking": true } é útil em utilitários de migração em que os índices são criados em coleções vazias antes do início das gravações de dados.
Considere um exemplo da opção de bloqueio para criação de índice na coleção 'employee' no banco de dados 'cosmicworks':
use cosmicworks;
db.runCommand({
createIndexes: "employee",
indexes: [{"key":{"name":1}, "name":"name_1"}],
blocking: true
})
Conteúdo relacionado
Confira a indexação de texto, que permite uma pesquisa e consulta eficientes de dados baseados em texto.