O MongoDB fornece estes métodos para retornar informações do plano de query e estatísticas de execução:
Para aprender como interpretar os resultados, consulte Interpretar os resultados do plano de explicação.
Importante
explain ignora o cache do plano. Em vez disso, um conjunto de planos candidatos é gerado, e um vencedor é escolhido sem consultar o cache do plano. Além disso, explain impede que o planejador de consultas do MongoDB armazene em cache o plano vencedor.
Observação
Esta página documenta os campos de saída mais importantes. Campos para uso interno não são documentados. Os campos estão sujeitos a alterações.
Explicar estrutura de saída
Os resultados explain apresentam planos de query como uma árvore de estágios. A estrutura difere dependendo se a operação usa o mecanismo de query clássico ou o mecanismo de query de execução baseado em slot:
winningPlan: { stage: <STAGE1>, ... inputStage: { stage: <STAGE2>, ... inputStage: { stage: <STAGE3>, ... } } },
winningPlan: { queryPlan: { stage: <STAGE1>, ... inputStage: { stage: <STAGE2>, ... inputStage: { stage: <STAGE3>, ... } } } slotBasedPlan: { ... } },
Cada estágio passa seus documentos ou chaves de índice para o nó pai. Os nós de folha acessam a coleção ou os índices. Os nós internos consomem saída dos nós filhos. O nó raiz indica o estágio do qual o MongoDB deriva o conjunto de resultados.
Os nomes dos estágios descrevem a operação:
COLLSCANpara uma verificação de collectionIXSCANpara varredura de chaves de índiceFETCHpara recuperar documentosGROUPpara agrupar documentosSHARD_MERGEpara mesclar resultados de shardsSHARDING_FILTERpara filtrar documentos órfãos de shardsTS_MODIFYpara modificar uma coleção de séries temporaisBATCHED_DELETEpara exclusões de vários documentos agrupados internamente (a partir do MongoDB 6.1)EOFpara quando um estágio é fim do fluxoEXPRESSestágios para um conjunto limitado de queries que podem ignorar o planejamento regular de queries para usar planos de varredura de índice otimizados (novo na versão 8.0).EXPRESSos estágios podem ser um dos seguintes:EXPRESS_CLUSTERED_IXSCANEXPRESS_DELETEEXPRESS_IXSCANEXPRESS_UPDATE
Explicar a saída para MongoDB 5.1 e posterior
Esta seção mostra a saída explain para MongoDB 5.1 e versões posteriores. Para ver a saída de explicação para versões mais antigas do MongoDB, consulte a documentação dessa versão.
explain.explainVersionCampo inteiro.
explainVersioné a versão do formato de saída do plano, como"1"ou"2".Novidades na versão 5.1.
queryPlanner
explain.queryPlanner detalha o plano selecionado pelo otimizador de query.
Os exemplos a seguir podem combinar a saída dos mecanismos de execução clássicos e baseados em slots e não são representativos. Sua saída pode ser diferente.
Para collections não fragmentadas, explain retorna as seguintes informações queryPlanner:
queryPlanner: { namespace: <string>, indexFilterSet: <boolean>, parsedQuery: { ... }, planCacheShapeHash: <hexadecimal string>, planCacheKey: <hexadecimal string>, maxIndexedOrSolutionsReached: <boolean>, maxIndexedAndSolutionsReached: <boolean>, maxScansToExplodeReached: <boolean>, winningPlan: { stage: <STAGE1>, type: <string>, inputStage: { stage: <string>, ... } }, rejectedPlans: [ <candidate plan1>, ] }
A partir do MongoDB 8.0, o campo queryHash existente é duplicado em um novo campo chamado planCacheShapeHash. Se você estiver usando uma versão anterior do MongoDB , verá apenas o campo queryHash. As futuras versões do MongoDB removerão o campo queryHash obsoleto, e você precisará usar o campo planCacheShapeHash em seu lugar.
Para coleções fragmentadas, explain inclui o planejador de queries principal e as informações do servidor para cada fragmento acessado no campo shards:
{ queryPlanner: { mongosPlannerVersion: <int> winningPlan: { stage: <STAGE1>, type: <string>, shards: [ { shardName: <string>, connectionString: <string>, serverInfo: { ... }, namespace: <string>, indexFilterSet: <boolean>, parsedQuery: { ... }, querySettings: { ... }, planCacheShapeHash: <hexadecimal string>, planCacheKey: <hexadecimal string>, maxIndexedOrSolutionsReached: <boolean>, maxIndexedAndSolutionsReached: <boolean>, maxScansToExplodeReached: <boolean>, winningPlan: { stage: <STAGE1>, type: <string>, inputStage: { stage: <string>, ... } }, rejectedPlans: [ <candidate plan1>, ] } ] } } }
A partir do MongoDB 8.0, o campo queryHash existente é duplicado em um novo campo chamado planCacheShapeHash. Se você estiver usando uma versão anterior do MongoDB , verá apenas o campo queryHash. As futuras versões do MongoDB removerão o campo queryHash obsoleto, e você precisará usar o campo planCacheShapeHash em seu lugar.
explain.queryPlannerContém informações sobre o plano de query selecionado pelo otimizador de query.
explain.queryPlanner.namespaceString que especificou o namespace do banco de dados e a coleção acessada pela query, no formato
<database>.<collection>.
explain.queryPlanner.indexFilterSetUm booleano que especifica se o MongoDB aplicou um filtro de índice para a forma de query de cache do plano.
explain.queryPlanner.querySettingsSe as configurações de query forem definidas,
querySettingsconterá detalhes sobre as configurações de query aplicadas à forma de query.Para adicionar configurações de query e explorar exemplos, que incluem saída
explain()comquerySettings, consultesetQuerySettings.Novidades na versão 8.0.
explain.queryPlanner.planCacheShapeHashA partir do MongoDB 8.0, o campo
queryHashexistente é duplicado em um novo campo chamadoplanCacheShapeHash. Se você estiver usando uma versão anterior do MongoDB , verá apenas o campoqueryHash. As futuras versões do MongoDB removerão o campoqueryHashobsoleto, e você precisará usar o campoplanCacheShapeHashem seu lugar.string hexadecimal. Hash da forma de query do cache do plano, dependente somente da forma de query do cache do plano. Use-o para encontrar queries lentas com a mesma forma de query cache do plano.
Observação
As colisões de hash entre diferentes formas de query do cache do plano são possíveis, mas improváveis.
Para obter mais informações sobre
planCacheShapeHasheplanCacheKey, consulte planCacheShapeHash e planCacheKey.
explain.queryPlanner.planCacheKeyHash da chave de entrada do cache do plano. Ao contrário de
explain.queryPlanner.planCacheShapeHash, esse valor é uma função da forma de query e dos índices atualmente disponíveis. Adicionar ou descartar índices de suporte pode alterar oplanCacheKey, mas nãoplanCacheShapeHash.Para obter mais informações sobre
planCacheShapeHasheplanCacheKey, consulte planCacheShapeHash e planCacheKey.
explain.queryPlanner.optimizationTimeMillisMilissegundos gastos na otimização de queries. Não inclui queries
$lookupinternas com otimização de tempo.
explain.queryPlanner.optimizedPipelineUm booleano que indica que toda a operação de aggregation pipeline foi otimizada e, em vez disso, cumprida por uma árvore de estágios de execução do plano de query.
Por exemplo, a seguinte operação de agregação pode ser realizada pela árvore de execução do plano de query em vez de usar o pipeline de agregação.
db.example.aggregate([ { $match: { someFlag: true } } ] ) O campo só está presente se o valor for
truee só se aplica para explicar as operações de aggregation pipeline. Quandotrue, como o pipeline foi otimizado, nenhuma informação do estágio de aggregation aparece no resultado.
explain.queryPlanner.winningPlanDocumento com o plano selecionado pelo otimizador de query.
explain.queryPlanner.winningPlan.stageString que indica o nome do estágio. Cada estágio contém informações específicas para seu tipo (por exemplo,
IXSCANinclui limites do índice). Estágios com estágios filhos têm um campoinputStageouinputStages.Presente quando a operação usou o mecanismo de execução de query clássico.
explain.queryPlanner.winningPlan.typeSe
stageestiver definido como"EOF",typeserá uma string que indica a razão do estágio EOF:"nonExistentNamespace": o namespace da query não existe."predicateEvalsToFalse": a simplificação da expressão determina que a query não corresponde a nenhum documento.
explain.queryPlanner.winningPlan.inputStageDocumento que descreve o estágio filho que fornece documentos ou chaves de índice para seu pai. Presente quando o pai tem exatamente um filho.
explain.queryPlanner.winningPlan.inputStagesArray de documentos que descrevem os estágios filhos. Os estágios filhos fornecem os documentos ou chaves de índice para o estágio pai. Presente quando o pai tem vários nós filhos, como em uma expressão $or.
Presente quando a operação usou o mecanismo de execução de query clássico.
explain.queryPlanner.winningPlan.isCachedUm booleano que indica se o vencedor do Plano está no cache do plano.
No máximo um plano (vencedor ou rejeitado) tem este campo definido como
true. Se não existir nenhum plano em cache, o campo seráfalsepara todos os planos.
explain.queryPlanner.winningPlan.queryPlanDocumento com o plano selecionado pelo otimizador de query, apresentado como uma árvore de estágios.
Presente quando a query usou o mecanismo de query de execução baseado em slot.
Novidades na versão 5.1.
explain.queryPlanner.winningPlan.queryPlan.stageUma string que indica o nome do estágio.
Cada estágio contém informações específicas para seu tipo. Por exemplo,
IXSCANinclui limites de índice.
explain.queryPlanner.winningPlan.queryPlan.typeSe
stageestiver definido como"EOF",typeserá uma string que indica a razão do estágio EOF:"nonExistentNamespace": indica que o namespace da query não existe."predicateEvalsToFalse": indica que a simplificação da expressão determina que a query não corresponderá a nenhum documento.
explain.queryPlanner.winningPlan.queryPlan.planNodeIdCampo inteiro exclusivo que identifica cada estágio do plano de execução. O campo está incluído em todos os estágios dos resultados
explain.Novidades na versão 5.1.
explain.queryPlanner.winningPlan.slotBasedPlanDocumente com informações sobre a árvore e os estágios do plano de execução da query baseada em slot. Para uso interno do MongoDB.
Novidades na versão 5.1.
explain.queryPlanner.winningPlan.slotBasedPlan.stagesString que inclui informações sobre cada estágio do plano de execução da query baseada em slots, incluindo ordem de execução, operações e atribuições de slots. Para uso interno do MongoDB.
A partir do MongoDB 8.0, se uma query usar processamento em bloco,
block_to_rowets_bucket_to_cellblockaparecerão na saídastages.Alterado na versão 8.0.
explain.queryPlanner.rejectedPlansArray de planos candidatos considerados e rejeitados pelo otimizador de query. A array pode estar vazia se não houver outros planos candidatos.
Os planos rejeitados têm os mesmos campos que
explain.queryPlanner.winningPlan.A partir do MongoDB 8.0, os planos de query rejeitados contêm apenas a parte
findda query. Em versões anteriores, os planos rejeitados podem conter estágios de agregação como$group. Esses estágios de agregação não são usados pelo planejador de query para escolher o plano vencedor, portanto, o camporejectedPlanscontém apenas a parte da query que foi usada para escolher o plano vencedor.
executionStats
As informações explain.executionStats retornadas detalham a execução do plano vencedor. Para incluir executionStats nos resultados, você deve executar a explicação em:
Modo de detalhamento allPlansExecution . Utilize o modo
allPlansExecutionpara incluir dados de execução parcial capturados durante a seleção de plano.
Esses exemplos podem combinar as estruturas de saída dos mecanismos de execução clássicos e baseados em slots do MongoDB. Eles não pretendem ser representativos. Sua saída pode diferir significativamente.
Para collections não fragmentadas, explain retorna as seguintes informações executionStats:
executionStats: { executionSuccess: <boolean>, nReturned: <int>, executionTimeMillis: <int>, totalKeysExamined: <int>, totalDocsExamined: <int>, executionStages: { stage: <STAGE1> nReturned: <int>, executionTimeMillisEstimate: <int>, opens: <int>, // Starting in MongoDB 5.1 closes: <int>, // Starting in MongoDB 5.1 works: <int>, advanced: <int>, needTime: <int>, needYield: <int>, saveState: <int>, restoreState: <int>, isEOF: <boolean>, ... inputStage: { stage: <STAGE2>, nReturned: <int>, ... numReads: <int>, // Starting in MongoDB 5.1 ... executionTimeMillisEstimate: <int>, ... spills: <long long>, spilledBytes: <long long>, spilledRecords: <long long>, spilledDataStorageSize: <long long>, ... inputStage: { ... } } }, allPlansExecution: [ { nReturned: <int>, executionTimeMillisEstimate: <int>, totalKeysExamined: <int>, totalDocsExamined: <int>, score: <double>, executionStages: { stage: <STAGEA>, nReturned: <int>, executionTimeMillisEstimate: <int>, ... inputStage: { stage: <STAGEB>, ... inputStage: { ... } } } }, ... ] operationMetrics: { cpuNanos: <int>, cursorSeeks: <int>, docBytesRead: <int>, docBytesWritten: <int>, docUnitsRead: <int>, docUnitsReturned: <int>, docUnitsWritten: <int>, idxEntryBytesRead: <int>, idxEntryBytesWritten: <int>, idxEntryUnitsRead: <int>, idxEntryUnitsWritten: <int>, totalUnitsWritten: <int>, keysSorted: <int>, sorterSpills: <int> } }
Para coleções fragmentadas, explain inclui as estatísticas de execução de cada fragmento acessado.
executionStats: { nReturned: <int>, executionTimeMillis: <int>, totalKeysExamined: <int>, totalDocsExamined: <int>, executionStages: { stage: <STAGE1> nReturned: <int>, executionTimeMillis: <int>, opens: <int>, // Starting in MongoDB 5.1 closes: <int>, // Starting in MongoDB 5.1 totalKeysExamined: <int>, totalDocsExamined: <int>, totalChildMillis: <NumberLong>, shards: [ { shardName: <string>, executionSuccess: <boolean>, executionStages: { stage: <STAGE2>, nReturned: <int>, executionTimeMillisEstimate: <int>, ... chunkSkips: <int>, inputStage: { stage: <STAGE3>, ... numReads: <int>, // Starting in MongoDB 5.1 ... spills: <long long>, spilledBytes: <long long>, spilledRecords: <long long>, spilledDataStorageSize: <long long>, ... inputStage: { ... } } } }, ... ] } allPlansExecution: [ { shardName: <string>, allPlans: [ { nReturned: <int>, executionTimeMillisEstimate: <int>, totalKeysExamined: <int>, totalDocsExamined:<int>, executionStages: { stage: <STAGEA>, nReturned: <int>, executionTimeMillisEstimate: <int>, ... inputStage: { stage: <STAGEB>, ... inputStage: { ... } } } }, ... ] }, { shardName: <string>, allPlans: [ ... ] }, ... ] }
explain.executionStatsContém estatísticas que descrevem a execução da query concluída para o plano vencedor. Para operações de gravação, a execução da query concluída refere-se às modificações que seriam executadas, mas não aplicam as modificações no banco de dados.
explain.executionStats.nReturnedNúmero de documentos retornados pelo plano de query vencedor.
nReturnedcorresponde ao camponretornado pelocursor.explain()em versões anteriores do MongoDB.
explain.executionStats.executionTimeMillisTempo total em milissegundos necessário para a seleção do plano de query e a execução da query. Inclui o tempo necessário para executar a parte da fase de avaliação do processo de seleção do plano, mas não inclui o tempo de rede para transmitir os dados de volta ao cliente.
O tempo relatado por
explain.executionStats.executionTimeMillisnão é necessariamente representativo do tempo real da query. Durante operações de estado estacionário (quando o plano de query é armazenado em cache) ou ao usarcursor.hint()comcursor.explain(), o MongoDB ignora o processo de seleção do plano, resultando em um tempo real mais rápido, levando a um valorexplain.executionStats.executionTimeMillismais baixo.
explain.executionStats.totalKeysExaminedNúmero de entradas de índices verificadas.
explain.executionStats.totalKeysExaminedcorresponde ao camponscannedretornado porcursor.explain()em versões anteriores do MongoDB.
explain.executionStats.totalDocsExaminedNúmero de documentos examinados durante a execução da query. As etapas comuns de execução de query que examinam documentos são
COLLSCANeFETCH.Observação
explain.executionStats.totalDocsExaminedrefere-se ao número total de documentos examinados e não ao número de documentos devolvidos. Por exemplo, um estágio pode examinar um documento para aplicar um filtro. Se o documento for filtrado, ele foi examinado, mas não será retornado como parte do conjunto de resultados da query.Se um documento for analisado várias vezes durante a execução da consulta,
explain.executionStats.totalDocsExaminedcontará cada análise. Ou seja,explain.executionStats.totalDocsExaminednão é uma contagem do número total de documentos exclusivos analisados.
explain.executionStats.executionStagesDetalha a execução completa do plano vencedor como uma árvore de estágios; ou seja, um estágio pode ter um
inputStageou váriosinputStages.A partir do MongoDB 5.1, um estágio pode ter estes estágios de entrada:
thenStageelseStageinnerStageouterStage
Cada estágio consiste em informações de execução específicas do estágio.
explain.executionStats.executionStages.executionTimeMillisEstimateO tempo estimado em milissegundos para a execução da query.
explain.executionStats.executionStages.opensA partir do MongoDB 5.1, o número de vezes que um estágio foi aberto durante a execução de query
explain.executionStats.executionStages.closesA partir do MongoDB 5.1, o número de vezes que um estágio foi fechado durante a execução de query.
explain.executionStats.executionStages.worksEspecifica o número de "unidades de trabalho" executadas pelo estágio de execução da query. A execução da query divide seu trabalho em pequenas unidades. Uma "unidade de trabalho" pode consistir em examinar uma única chave de índice, buscar um único documento da collection, aplicar uma projeção a um único documento ou fazer uma contabilidade interna.
Este campo aparece se a operação utilizou o mecanismo de execução de query clássico.
explain.executionStats.executionStages.saveStateO número de vezes que o estágio da query suspendeu o processamento e salvou seu estado de execução atual, por exemplo, na preparação para gerar travas.
explain.executionStats.executionStages.restoreStateO número de vezes que o estágio da query restaurou um estado de execução salvo, por exemplo, depois de recuperar travas que ele havia gerado anteriormente.
explain.executionStats.executionStages.isEOFEspecifica se o estágio de execução atingiu o fim do fluxo:
Se
trueou1, o estágio de execução chegou ao fim do fluxo.Se
falseou0, o estágio ainda pode ter resultados para retornar. Por exemplo, considere uma query com um limite cujos estágios de execução consistem em um estágioLIMITcom um estágio de entrada deIXSCANpara a query. Se a query retornar mais do que o limite especificado, o estágioLIMITinformaráisEOF: 1, mas o estágioIXSCANsubjacente informaráisEOF: 0.
explain.executionStats.executionStages.opTypePara operações em coleções de séries temporais, o tipo de operação.
explain.executionStats.executionStages.bucketFilterPara operações em coleções de séries temporais, o filtro usado para reduzir o número de buckets consultados no catálogo de buckets.
explain.executionStats.executionStages.residualFilterPara operações em coleções de séries temporais, o filtro usado para consultar o catálogo de buckets.
explain.executionStats.executionStages.nBucketsUnpackedPara operações em coleções de séries temporais, o número de buckets descompactados para resolver a operação.
explain.executionStats.executionStages.nMeasurementsDeletedPara operações em coleções de séries temporais, o número de documentos excluídos.
explain.executionStats.executionStages.nMeasurementsInsertedPara operações em coleções de séries temporais, o número de documentos inseridos.
explain.executionStats.executionStages.nMeasurementsMatchedPara operações em coleções de séries temporais, o número de documentos correspondentes.
explain.executionStats.executionStages.nMeasurementsModifiedPara operações em coleções de séries temporais, o número de documentos modificados.
explain.executionStats.executionStages.nMeasurementsUpsertedPara operações em coleções de séries temporais, o número de documentos atualizados com upsert.
explain.executionStats.executionStages.inputStageCada
inputStagepode ter campos diferentes dependendo do valor deinputStage.stage. A tabela a seguir descreve possíveis campos e em quais estágios eles podem aparecer.Cada
inputStagepode ter outroinputStagecomo um campo. Consulte Explicar estrutura de saída.CampoDescriçãoEstágios aplicáveisdocsExaminedEspecifica o número de documentos verificados durante o estágio de execução da query.
COLLSCAN,FETCHkeysExaminedPara estágios de execução de queries que analisam um índice
keysExaminedé o número total de chaves dentro e fora dos limites que são examinadas no processo de varredura do índice. Se a varredura do índice consistir em uma única faixa contígua de chaves, somente as chaves dentro dos limites precisarão ser examinadas. Se os limites do índice consistirem em várias faixas de chaves, o processo de execução de varredura do índice poderá examinar chaves fora dos limites para pular do final de uma faixa para o início da próxima.IXSCANnumReadsO número de documentos verificados ou chaves de índice examinadas durante o estágio de execução da query.
Novidades na versão 5.1.
COLLSCAN,IXSCANseeksO número de vezes que tivemos que buscar o cursor do índice para uma nova posição para concluir a varredura do índice.
IXSCANusedDiskSe o estágio foi gravado em disco.
Novidades na versão 5.3.
GROUPspillsO número de vezes que o estágio passou para o disco.
Novidades na versão 8.2.
GROUP,SORTspilledBytesA quantidade total de dados gravados no disco em bytes.
Novidades na versão 8.2.
GROUP,SORTspilledRecordsO número total de registros individuais transferidos para o disco.
Novidades na versão 8.2.
GROUP,SORTspilledDataStorageSizeO espaço total em disco, em bytes, usado pelos dados derramados.
Novidades na versão 8.2.
GROUP,SORT
explain.executionStats.allPlansExecutionContém informações de execução parcial capturadas durante a fase de seleção do plano para os planos vencedores e rejeitados. O campo está presente somente se o
explainexecutar no modo de detalhamentoallPlansExecution.
explain.executionStats.operationMetricsContém estatísticas de consumo de recursos, desde que não sejam zero. O campo está presente somente se
explainexecutar no modo de detalhamentoexecutionStatsou superior e seprofileOperationResourceConsumptionMetricsestiver ativado.Aviso
O MongoDB 8.2 remove
profileOperationResourceConsumptionMetrics. Portanto, o código que depende de operationMetrics não funciona.
serverInfo
Para collections não fragmentadas, explain retorna as seguintes informações serverInfo para a instância MongoDB:
serverInfo: { host: <string>, port: <int>, version: <string>, gitVersion: <string> }
Para coleções fragmentadas, explain retorna serverInfo para cada fragmento acessado e um objeto serverInfo de nível superior para mongos.
queryPlanner: { ... winningPlan: { stage: <STAGE1>, shards: [ { shardName: <string>, connectionString: <string>, serverInfo: { host: <string>, port: <int>, version: <string>, gitVersion: <string> }, ... } ... ] } }, serverInfo: { // serverInfo for mongos host: <string>, port: <int>, version: <string>, gitVersion: <string> } ...
Estatística do plano de execução da query com estágio de pipeline $lookup
Novidades na versão 5.0.
Os resultados da explicação podem incluir estatísticas de execução para consultas que usam um estágio de pipeline $lookup. Para incluir essas estatísticas de execução, você deve executar a operação de explicação em um destes modos de detalhamento de execução:
Os seguintes campos são incluídos nos resultados explicativos para uma query $lookup:
'$lookup': { from: <string>, as: <string>, localField: <string>, foreignField: <string> }, totalDocsExamined: <long>, totalKeysExamined: <long>, collectionScans: <long>, indexesUsed: [ <string_1>, <string_2>, ..., <string_n> ], executionTimeMillisEstimate: <long>
Para ver as descrições dos campos na seção $lookup, consulte a página $lookup.
Os outros campos são:
Estatísticas do plano de execução para queries de pesquisa
Novidades na versão 8.1.
Os resultados da explicação incluem estatísticas de execução para queries que usam um estágio de pipeline $search, $searchMeta ou $vectorSearch. Para incluir estatísticas de execução para consultas de pesquisa, execute o comando explain em um dos seguintes modos de detalhamento de execução:
O MongoDB retorna estatísticas de execução para queries de pesquisa e pesquisa vetorial que usam somente o mecanismo clássico.
Para obter mais detalhes sobre a pesquisa e a query de pesquisa vetorial explica os resultados, consulte:
Varredura de collection
Se o planejador de queries selecionar uma varredura de collection, o resultado da explicação incluirá um estágio COLLSCAN.
Se o planejador de query selecionar um índice, o resultado de explicação incluirá um estágio IXSCAN. O estágio inclui informações como o padrão da chave do índice, a direção da travessia e os limites do índice.
A partir do MongoDB 5.3, se o planejador de consulta selecionar um índice clusterizado para uma coleção clusterizada e a consulta contiver limites que definem a parte do índice a ser pesquisada, o resultado da explicação incluirá um estágio CLUSTERED_IXSCAN. O estágio inclui informações sobre a chave de índice agrupada e os limites do índice.
Se o planejador de queries selecionar um índice clusterizado para uma coleção clusterizada e a query não contiver limites, a query executará uma varredura de coleção não limitada e o resultado da explicação incluirá um estágio COLLSCAN.
Observação
O parâmetro notablescan não permite queries ilimitadas que usam um índice clusterizado porque as queries exigem uma varredura completa da collection.
Para obter mais informações sobre estatística de execução de verificações de coleção, consulte Interpretar resultados do plano de explicação.
Queries cobertas
Quando um índice cobre uma query, o MongoDB pode corresponder as condições da query e retornar os resultados usando apenas as chaves de índice. O MongoDB não precisa examinar documentos da coleção para executar qualquer parte da query.
Quando um índice abrange uma consulta, o resultado de explicação tem um estágio IXSCAN que não é descendente de um estágio FETCH e, no executionStats, o explain.executionStats.totalDocsExamined é 0.
$or Expressão
Se o MongoDB utilizar índices para uma expressão $or, o resultado incluirá o estágio OR com uma array explain.queryPlanner.winningPlan.inputStages que detalha os índices. Ex.:
{ stage: 'OR', inputStages: [ { stage: 'IXSCAN', ... }, { stage : 'IXSCAN', ... }, ... ] }
Em versões anteriores do MongoDB, o cursor.explain() retornou a array clauses que detalhou os índices.
$sort e $group estágios
Quando explain é executado no modo de detalhamento executionStats ou allPlansExecution, os estágios $sort e $group têm saída adicional.
Estágio | Campo | Tipo | Descrição |
|---|---|---|---|
| long | Um número estimado de bytes processados no estágio | |
| booleano | Se o estágio | |
| long long | O número de vezes que o estágio | |
| long long | Uma estimativa do número de bytes gravados no disco no estágio | |
| long long | O número total de registros individuais transferidos para o disco. | |
| long long | O espaço total em disco, em bytes, usado pelos dados derramados. | |
| booleano | Se o estágio | |
| long long | O número de vezes que o estágio | |
| long long | Uma estimativa do número de bytes gravados no disco no estágio | |
| long long | O número total de registros individuais transferidos para o disco. | |
| long long | O espaço total em disco, em bytes, usado pelos dados derramados. |
Estágio de classificação
Se o MongoDB não puder usar um ou mais índices para obter a ordem de classificação, os resultados incluirão um estágio SORT indicando uma operação de classificação na memória. Se o plano de explicação não contiver um estágio SORT explícito, o MongoDB usou um índice para obter a ordem de classificação.
Hash com forma de query
A partir do MongoDB 8.0, explain gera o seguinte campo:
explain.queryShapeHashUma string hexadecimal que representa o hash da forma de query. Para obter mais informações, consulte Formas de query.
Novidades na versão 8.0.