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
- Abra qualquer tab de workspace numa collection (Documents, Aggregation, etc.).
- Digite sua query na Query Bar ou construa um pipeline no builder de Aggregation.
- Clique em "Explain" (top-right). O plano abre como uma árvore.
- 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:
| Cor | Significado | Gatilho |
|---|---|---|
| 🟢 Verde | Stage eficiente | IXSCAN / EXPRESS_IXSCAN / IDHACK / FETCH |
| 🟡 Amarelo | Provavelmente desperdício — revise | COLLSCAN pequeno, SORT in-memory, baixa selectivity de índice (<10%), stage domina >30% do tempo total |
| 🔴 Vermelho | Definitivamente errado — corrija antes de subir | COLLSCAN 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%.