Otimizar a performance da consulta

Para resolver problemas de consultas lentas, use o Query Explain para receber o plano de execução da consulta e o perfil de execução do tempo de execução. A seção a seguir descreve etapas que você pode seguir para otimizar o desempenho da consulta, dependendo do perfil de execução:

Limitar o número de resultados

Use o campo "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 agrupar os nós Limit e MajorSort e substituir uma materialização e classificação completa na memória por uma classificação TopN, reduzindo o requisito de memória para a consulta.

Limitar o tamanho do documento de resultado

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 (não de várias chaves), isso também permite que a consulta seja totalmente coberta pela verificação do índice, evitando a necessidade de buscar documentos no armazenamento principal.

Usar índices

Use as instruções a seguir para configurar e otimizar índices.

Identificar se a consulta está usando um índice

Para saber se a consulta está usando um índice, verifique os nós folha na árvore de execução. Se o nó folha da árvore de execução for um nó TableScan, isso significa que a consulta não está usando um índice e está verificando documentos do armazenamento principal. Se um índice estiver sendo usado, o nó folha da árvore de execução vai mostrar o ID e os campos do índice.

Identificar se o índice usado 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 usando o índice não é seletivo. Para criar um índice mais adequado, consulte Criar índices.

Se um índice não de 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 usado 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 (não Multikey) com campos na seguinte ordem:

  1. 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.
  2. Todos os campos que serão classificados (na mesma ordem).
  3. Campos que serão usados em operadores de intervalo ou desigualdade em ordem decrescente de seletividade de restrição de consulta.
  4. 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 está usando esse índice, é possível substituir a preferência de índice do mecanismo de consulta usando uma dica de consulta.