Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Otimizar o desempenho da consulta

Nesta página

  • Crie índices para oferecer suporte a queries
  • Para reduzir a demanda da rede, limite o número de resultados da query
  • Usar projeções para retornar somente dados necessários
  • Use $hint para selecionar um índice específico
  • Use o operador de incremento para fazer operações no lado do servidor

Para queries comumente emitidas, crie índices. Se uma query pesquisar vários campos, crie um índice composto. A digitalização de um índice é muito mais rápida do que a digitalização de uma collection. As estruturas dos índices são menores que as referências dos documentos e armazenam as referências em ordem.

Exemplo

Se você tiver uma coleção posts contendo publicações de blog e se você emitir regularmente uma query que classificar o campo author_name, poderá otimizar a query criando um índice no campo author_name:

db.posts.createIndex( { author_name : 1 } )

Os índices também melhoram a eficiência em queries que classificam rotineiramente em um determinado campo.

Exemplo

Se você emitir regularmente uma consulta que classifica o campo timestamp, poderá otimizar a consulta criando um índice no campo timestamp:

Criando este índice:

db.posts.createIndex( { timestamp : 1 } )

Otimiza esta query:

db.posts.find().sort( { timestamp : -1 } )

Como o MongoDB pode ler índices em ordem crescente e decrescente, a direção de um índice de chave única não importa.

Os índices suportam queries, operações de atualização e algumas fases do aggregation pipeline.

As chaves de índice que são do tipo BinData são armazenadas de forma mais eficiente no índice se:

  • o valor do subtipo binário está na faixa de 0-7 ou 128-135, e

  • o comprimento da array de bytes é: 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24 ou 32.

Os cursores do MongoDB retornam resultados em grupos de vários documentos. Se você souber o número de resultados que deseja, poderá reduzir a demanda dos recursos da rede emitindo o método limit().

Isso geralmente é usado em conjunto com operações de classificação. Por exemplo, se você precisar de apenas 10 resultados da sua query para a coleção posts, você emitiria o seguinte comando:

db.posts.find().sort( { timestamp : -1 } ).limit(10)

Para obter mais informações sobre como limitar os resultados, consulte limit()

Quando você precisa de apenas um subconjunto de campos dos documentos, pode obter um melhor desempenho retornando somente os campos necessários:

Por exemplo, se na sua query para a collection posts você precisar somente dos campos timestamp, title, author e abstract

db.posts.find( {}, { timestamp : 1 , title : 1 , author : 1 , abstract : 1} ).sort( { timestamp : -1 } )

Para obter mais informações sobre como usar projeções, consulte Campos do projeto a serem retornados da query.

Na maioria dos casos, o otimizador de query seleciona o índice ideal para uma operação específica. No entanto, você pode forçar o MongoDB a usar um índice específico usando o método hint(). Use hint() para oferecer suporte ao teste de desempenho ou em algumas queries nas quais você deve selecionar um campo ou campo incluído em vários índices.

Use o operador $inc do MongoDB para aumentar ou diminuir valores em documentos. O operador incrementa o valor do campo no lado do servidor, como uma alternativa para selecionar um documento, fazer modificações simples no cliente e, em seguida, gravar o documento inteiro no servidor. O operador $inc também pode ajudar a evitar condições de corrida, o que resultaria quando duas instâncias de aplicativo fizessem queries de um documento, incrementassem manualmente um campo e salvassem o documento inteiro ao mesmo tempo.

← Saída do analisador de banco de dados