Otimizar o desempenho da consulta
Nesta página
Crie índices para oferecer suporte a queries
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.
Para reduzir a demanda da rede, limite o número de resultados da query
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()
Usar projeções para retornar somente dados necessários
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.
Use $hint
para selecionar um índice específico
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 de incremento para fazer operações no lado do servidor
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.