Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Interpretar os resultados do plano de explicação

Você pode usar a explicação dos resultados para determinar as seguintes informações sobre uma query:

  • O tempo que uma query levou para ser concluída

  • Se a query usou um índice

  • O número de documentos e chaves de índice verificados para atender a uma query

Observação

Os resultados do plano de explicação para queries estão sujeitos a alterações entre as versões MongoDB.

Os métodos cursor.explain("executionStats") e db.collection.explain("executionStats") fornecem estatísticas sobre o desempenho de uma query. Essas estatísticas podem ser úteis para medir se e como uma query utiliza um índice. Consulte db.collection.explain() para obter detalhes.

Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

A query a seguir recupera documentos em que o campo year tem um valor entre 2000 e 2005, inclusive:

db.movies.find( { year: { $gte: 2000, $lte: 2005 } } )

Esta query corresponde a 3809 dos 21349 documento na coleção.

Para exibir o plano de query selecionado, encadeie o método cursor.explain("executionStats") cursor até o final do comando find:

db.movies.find( { year: { $gte: 2000, $lte: 2005 } }).explain("executionStats")
{ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'COLLSCAN', '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 3809, totalKeysExamined: 0, totalDocsExamined: 21349, executionStages: { stage: 'COLLSCAN', '...': '...' }, '...': '...' }, '...': '...'}
  • queryPlanner.winningPlan.stage exibe COLLSCAN para indicar uma verificação de collection.

    As verificações de collection indicam que mongod precisou verificar documento por documento de toda a collection para identificar os resultados. Essa é uma operação geralmente cara e pode resultar em queries lentas.

  • executionStats.nReturned exibe 3809 para indicar que o plano de query vencedor retorna 3,809 documento.

  • executionStats.totalKeysExamined exibe 0 para indicar que esta query não está usando um índice.

  • executionStats.totalDocsExamined exibe 21349 para indicar que o MongoDB teve que verificar 21,349 documentos na coleção para encontrar os 3,809 documentos correspondentes.

A diferença entre o número de documentos correspondentes e o número de documentos examinados pode sugerir que a query pode se beneficiar do uso de um índice para melhorar a eficiência.

Para suportar a query no campo year, adicione um índice no campo year:

db.movies.createIndex( { year: 1 } )

Para visualizar as estatísticas do plano de query, use o método explain() :

db.movies.find( { year: { $gte: 2000, $lte: 2005 } }).explain("executionStats")
{ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { year: 1 }, '...': '...' }, '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 3809, totalKeysExamined: 3809, totalDocsExamined: 3809, '...': '...' }, '...': '...'}
  • queryPlanner.winningPlan.inputStage.stage exibe IXSCAN para indicar o uso do índice.

  • executionStats.nReturned exibe 3809 para indicar que o plano de query vencedor retorna 3,809 documento.

  • executionStats.totalKeysExamined exibe 3809 para indicar que o MongoDB verificou 3,809 entradas de índice. O número de chaves examinadas corresponde ao número de documentos retornados, o que significa que mongod só precisou examinar as chaves do índice para retornar os resultados. O mongod não precisou digitalizar todos os documentos, e apenas os 3,809 documentos correspondentes tiveram que ser colocados na memória. Isso resulta em uma query muito eficiente.

  • executionStats.totalDocsExamined exibe 3809 para indicar que o MongoDB digitalizou 3,809 documento.

Sem o índice, a query verifica toda a coleção para retornar os documentos correspondentes. A query também precisa verificar a totalidade de cada documento, potencialmente colocando-os na memória. Isso resulta em uma operação de query cara e potencialmente lenta.

Ao executar com um índice, a query verifica apenas o número de entradas de índice e documentos que retorna, resultando em uma query mais eficiente.

Comparar Desempenho dos Índices

Para comparar manualmente o desempenho de uma consulta usando mais de um índice, você pode usar o método em hint() explain() conjunto com o método.

Considere a seguinte query:

db.movies.find( { year: { $gte: 2000, $lte: 2005 }, rated: "PG"} )

Esta query corresponde a 235 documentos.

Para dar suporte à consulta, adicione um índice composto. Com índices compostos, a ordem dos campos é importante.

Por exemplo, adicione os dois índices compostos a seguir. O primeiro índice ordena primeiro pelo campo year e depois pelo campo rated. O segundo índice ordena primeiro por rated e, em seguida, pelo campo year.

db.movies.createIndex( { year: 1, rated: 1 } )db.movies.createIndex( { rated: 1, year: 1 } )

Avalie o efeito do primeiro índice na query:

db.movies.find( { year: { $gte: 2000, $lte: 2005 }, rated: "PG" }).hint( { year: 1, rated: 1 } ).explain("executionStats")
{ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { year: 1, rated: 1 }, '...': '...' }, '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 235, totalKeysExamined: 246, totalDocsExamined: 235, '...': '...' }, '...': '...'}

O MongoDB escaneou 246 chaves de índice (executionStats.totalKeysExamined) para retornar 235 documentos correspondentes (executionStats.nReturned).

Avalie o efeito do segundo índice na query:

db.movies.find( { year: { $gte: 2000, $lte: 2005 }, rated: "PG" }).hint( { rated: 1, year: 1 } ).explain("executionStats")
{ queryPlanner: { namespace: 'sample_mflix.movies', winningPlan: { stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { rated: 1, year: 1 }, '...': '...' }, '...': '...' }, '...': '...' }, executionStats: { executionSuccess: true, nReturned: 235, totalKeysExamined: 235, totalDocsExamined: 235, '...': '...' }, '...': '...'}

O MongoDB escaneou 235 chaves de índice (executionStats.totalKeysExamined) para retornar 235 documentos correspondentes (executionStats.nReturned).

O segundo índice composto, { rated: 1, year: 1 }, é, portanto, o índice mais eficiente para dar suporte à query de exemplo, pois o servidor MongoDB só precisa escanear 235 index keys para encontrar todos os documento correspondentes usando esse índice, em comparação com 246 ao usar o índice composto { year: 1, rated: 1 }.

Avalie esta página