Pular para o conteúdo
Documentação

Visual Explain — leia planos num relance

Stage cards codificados por cor, chips de cost ratio, e glyphs per-stage para que o pior stage de um plano salte aos olhos sem ler JSON.

O que ele mostra

Todo plano de aggregation/find renderiza como uma árvore de stage cards. Cada card carrega 4 sinais visuais: uma barra de accent colorida de 4px à esquerda (grade good/warn/bad), um glyph identificando o tipo de stage (ícone Key para IXSCAN, Warning para COLLSCAN, SortAscending para SORT, etc.), um chip com a ratio examined/returned quando docsExamined está disponível, e um chip com o nome do index para stages da família IXSCAN.

Como abrir

  1. Abra qualquer tab de workspace numa collection (Documents, Aggregation, etc.).
  2. Digite sua query na Query Bar ou construa um pipeline no builder de Aggregation.
  3. Clique em "Explain" (top-right). O plano abre como uma árvore.
  4. Hover qualquer chip de cost-ratio para ver POR QUÊ aquele stage ganhou seu grade (collection scan completo, baixa selectivity, share dominante de tempo, etc.).

Grades de custo

NoSqlStudio classifica cada stage como good (eficiente), warn (provavelmente desperdício), ou bad (definitivamente errado) — aplicado em ordem de prioridade, primeiro match ganha:

CorSignificadoGatilho
🟢 VerdeStage eficienteIXSCAN / EXPRESS_IXSCAN / IDHACK / FETCH
🟡 AmareloProvavelmente desperdício — reviseCOLLSCAN pequeno, SORT in-memory, baixa selectivity de índice (<10%), stage domina >30% do tempo total
🔴 VermelhoDefinitivamente errado — corrija antes de subirCOLLSCAN sobre >1000 docs, SORT in-memory excedendo threshold de 32MB

Lendo o chip de cost ratio

O chip mostra "examined → returned · X%" — a porcentagem de docs examinados que realmente voltaram. Regra de bolso:

  • > 50%: índice tem bom shape para esta query.
  • 10–50%: borderline — pode ser aceitável para queries ad-hoc; reconstrua o índice para hot paths.
  • < 10% com examined > 100: warn — índice tem o shape errado (composite index faltando, sort order errada, etc.).

Exemplo prático

Rode esta query contra uma collection orders de 1M docs que não tem composite index:

db.orders.find({ status: 'paid', userId: ObjectId('...') })

Você verá um card COLLSCAN vermelho na base do plano ("Full collection scan over >1000 documents — likely missing an index"). Crie um composite index em { status: 1, userId: 1 } e re-rode — o plano agora mostra um IXSCAN verde com cost ratio de 99%.