Otimização do desempenho da consulta
Para resolver problemas de consultas lentas, use o Query Explain para acessar o plano de execução da consulta e o perfil de execução de ambiente de execução. Nesta seção, descrevemos as etapas que podem ser seguidas para otimizar o desempenho da consulta, dependendo do perfil de execução:
Limitar o número de resultados
Use o campo de registros retornados na árvore de execução para identificar se a consulta está retornando muitos documentos. Considere limitar o número de documentos retornados usando a cláusula $limit
. Isso reduz o tamanho do byte serializado dos resultados quando retornados aos clientes pela rede. Nos casos em que o nó Limit
é precedido por um nó MajorSort
, o mecanismo de consulta pode coalescer os nós Limit
e MajorSort
e substituir uma materialização e classificação completa na memória por uma ordenação TopN, reduzindo o requisito de memória para a consulta.
Limitar o tamanho do documento de resultados
Considere limitar o tamanho do documento retornado usando a cláusula $project
para evitar a busca de campos desnecessários. Isso ajuda a reduzir o custo de computação e memória do processamento de resultados intermediários e o tamanho do byte serializado dos resultados quando retornados aos clientes pela rede. Nos casos em que todos os campos referenciados na consulta são cobertos por um índice regular (sem várias chaves), isso também permite que a consulta seja totalmente coberta pela verificação de índice, sem precisar buscar documentos no armazenamento principal.
Usar índices
Use as instruções a seguir para configurar e otimizar índices.
Identificar se a consulta usa um índice
Para saber se a consulta usa um índice, verifique os nós folha na árvore de execução. Se o nó folha da árvore de execução é um nó TableScan, a consulta não usa um índice e verifica os documentos do armazenamento principal. Se um índice estiver em uso, o nó folha da árvore de execução exibirá o ID e os campos do índice.
Identificar se o índice em uso pode ser otimizado
Um índice é útil para uma consulta se puder reduzir o número de documentos que o mecanismo de consulta precisa buscar no armazenamento principal ou se a ordenação de campos puder atender ao requisito de classificação da consulta.
Se um índice for usado em uma consulta, mas o mecanismo de consulta ainda estiver buscando e descartando muitos documentos, conforme identificado por um nó de verificação que retorna muitos registros seguido por um nó de filtro que retorna poucos registros, isso é um sinal de que o predicado de consulta satisfeito que usa o índice não é seletivo. Para criar um índice mais adequado, consulte Criar índices.
Se um índice sem várias chaves for usado em uma consulta, mas o mecanismo de consulta ainda estiver realizando uma reordenação na memória do conjunto de resultados, conforme identificado por um nó MajorSort na árvore de execução da consulta, isso é um sinal de que o índice em uso não pode ser usado para atender ao requisito de classificação da consulta. Para criar um índice mais adequado, consulte a próxima seção.
Criar índices
Siga a documentação de gerenciamento de índices para criar índices. Para garantir que sua consulta possa usar índices, crie índices regulares (sem várias chaves) com campos na seguinte ordem:
- Todos os campos que serão usados em operadores de igualdade. Para maximizar a chance de reutilização em várias consultas, ordene os campos em ordem decrescente de ocorrência nos operadores de igualdade entre as consultas.
- Todos os campos que serão classificados (na mesma ordem).
- Campos que serão usados em operadores de intervalo ou desigualdade em ordem decrescente de seletividade de restrição de consulta.
- Campos que serão retornados como parte de uma consulta no índice: incluir esses campos no índice permite que ele cubra a consulta e evite ter que buscar o documento no armazenamento principal.
Para consultas que envolvem a filtragem e a classificação de campos de matriz, considere criar índices de várias chaves.
Usar dica de consulta
Se você criou um índice mais adequado para a consulta, mas o mecanismo de consulta não usa esse índice, é possível substituir a preferência de índice do mecanismo de consulta usando uma dica de consulta.