Visualizador de Plano de Execução SQL

Cole a saída do EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) para renderizar uma árvore de custos, marcar divergências entre linhas estimadas e reais e sugerir índices

Esta ferramenta analisa a saída real do EXPLAIN — não o texto estático da consulta — e renderiza o plano de execução como uma árvore indentada, colorida por severidade.

Entradas suportadas (auto-detectadas ou selecionáveis):

  • PostgreSQL: JSON de EXPLAIN (FORMAT JSON, ANALYZE), ou a saída TEXT indentada padrão.
  • MySQL: saída de EXPLAIN FORMAT=JSON, ou o EXPLAIN tabular clássico (id|select_type|table|type|key|rows|Extra).
  • SQLite: texto de EXPLAIN QUERY PLAN (SCAN/SEARCH … USING INDEX …).

Cada nó mostra: tipo de nó, relação, índice usado, custo/tempo estimado, linhas estimadas e — com EXPLAIN ANALYZE — linhas e tempos reais. Divergências ≥10× entre linhas estimadas e reais são marcadas como pontos quentes de estatísticas.

Diagnósticos cobrem: sequential/full table scans em tabelas grandes, divergência de estatísticas (ANALYZE desatualizado), filesorts, tabelas temporárias, nested loops caros, predicados não-sargable (funções sobre colunas indexadas), SELECT *, ORDER BY sem LIMIT — cada um com sugestão concreta de índice ou reescrita (ex. “adicione um índice em users(email)”).

Exemplos de resultados

1 Exemplos

Visualizar um EXPLAIN ANALYZE do PostgreSQL com divergência de linhas

Seq Scan estimado 1000 vs 95000 reais — hotspot de estatísticas desatualizadas com sugestão de índice.

Execution plan tree with divergence hotspot and index suggestion.
Ver parâmetros de entrada
{ "explainOutput": "[\n {\n \"Plan\": {\n \"Node Type\": \"Seq Scan\",\n \"Relation Name\": \"users\",\n \"Alias\": \"users\",\n \"Filter\": \"((email)::text = '[email protected]')\",\n \"Plan Rows\": 1000,\n \"Plan Width\": 142,\n \"Total Cost\": 1541.00,\n \"Actual Rows\": 95000,\n \"Actual Loops\": 1,\n \"Actual Startup Time\": 0.1,\n \"Actual Total Time\": 12.4\n }\n }\n]", "dialect": "auto", "sql": "SELECT * FROM users WHERE lower(email) = '[email protected]'", "maxDepth": 20 }

Fatos principais

Categoria
Desenvolvimento e Web
Tipos de entrada
textarea, select, number
Tipo de saída
html
Cobertura de amostras
4
API disponível
Yes

Visão geral

O Visualizador de Plano de Execução SQL ajuda desenvolvedores e administradores de banco de dados a otimizar consultas analisando saídas do EXPLAIN e EXPLAIN ANALYZE do PostgreSQL, MySQL e SQLite. A ferramenta transforma planos complexos em formato texto ou JSON em uma árvore de custos interativa e colorida, destacando gargalos de desempenho, divergências de estatísticas e sugerindo índices recomendados para acelerar suas consultas.

Quando usar

  • Quando uma consulta SQL apresenta lentidão em produção e você precisa identificar qual operação está consumindo mais tempo.
  • Ao analisar a diferença entre as linhas estimadas pelo planejador e as linhas reais retornadas para detectar estatísticas desatualizadas.
  • Para obter recomendações automáticas de criação de índices ou reescrita de consultas com base no plano de execução gerado pelo banco de dados.

Como funciona

  • Cole a saída textual ou em formato JSON do comando EXPLAIN ou EXPLAIN ANALYZE gerada pelo seu banco de dados (PostgreSQL, MySQL ou SQLite).
  • Selecione o dialeto correspondente ou deixe a detecção automática identificar a estrutura dos dados inseridos.
  • Opcionalmente, insira a consulta SQL original para ajudar na associação de predicados e defina o limite de profundidade da árvore.
  • Visualize a árvore de execução colorida por severidade, com alertas de divergência de linhas e sugestões práticas de índices.

Casos de uso

Identificação de varreduras sequenciais (Seq Scan) em tabelas grandes que necessitam de novos índices.
Diagnóstico de estatísticas desatualizadas comparando estimativas do planejador com a execução real.
Otimização de consultas complexas com múltiplos joins (Nested Loops) e ordenações caras (Filesort).

Exemplos

1. Otimização de Varredura Sequencial no PostgreSQL

Desenvolvedor Backend
Contexto
Um desenvolvedor percebeu lentidão ao buscar usuários por e-mail em uma tabela com mais de 100 mil registros.
Problema
O plano de execução mostrava um Seq Scan na tabela users com grande divergência entre as linhas estimadas e reais.
Como usar
Colou o JSON do EXPLAIN (FORMAT JSON, ANALYZE) no campo de entrada e selecionou o dialeto PostgreSQL.
Configuração de exemplo
{
  "explainOutput": "[\n  {\n    \"Plan\": {\n      \"Node Type\": \"Seq Scan\",\n      \"Relation Name\": \"users\",\n      \"Alias\": \"users\",\n      \"Filter\": \"((email)::text = '[email protected]')\",\n      \"Plan Rows\": 1000,\n      \"Actual Rows\": 95000\n    }\n  }\n]",
  "dialect": "postgresql",
  "sql": "SELECT * FROM users WHERE lower(email) = '[email protected]'"
}
Resultado
A ferramenta destacou o nó de Seq Scan em vermelho devido à divergência de 95x nas linhas e sugeriu a criação de um índice na coluna email da tabela users.

2. Identificação de Filesort no MySQL

Administrador de Banco de Dados
Contexto
Uma consulta de relatório com ordenação estava demorando muito para responder no ambiente de homologação.
Problema
A consulta utilizava ordenação em disco (filesort) sem aproveitar índices existentes.
Como usar
Executou EXPLAIN FORMAT=JSON no MySQL, copiou o resultado e colou no visualizador.
Configuração de exemplo
{
  "explainOutput": "{\n  \"query_block\": {\n    \"select_id\": 1,\n    \"ordering_operation\": {\n      \"using_filesort\": true,\n      \"table\": {\n        \"table_name\": \"orders\",\n        \"access_type\": \"ALL\"\n      }\n    }\n  }\n}",
  "dialect": "mysql"
}
Resultado
O visualizador exibiu um alerta crítico de filesort e recomendou um índice composto cobrindo as colunas de filtro e ordenação.

Testar com amostras

json, sql, text

Hubs relacionados

FAQ

Quais bancos de dados são suportados pelo visualizador?

A ferramenta suporta planos de execução do PostgreSQL (JSON e TEXT), MySQL (JSON e formato tabular clássico) e SQLite (EXPLAIN QUERY PLAN).

Como a ferramenta detecta divergências de estatísticas?

Ela compara o número de linhas estimadas pelo planejador com as linhas reais executadas (do EXPLAIN ANALYZE) e sinaliza diferenças iguais ou superiores a 10 vezes.

Posso colar a consulta SQL diretamente sem o EXPLAIN?

Não, a ferramenta analisa a saída do comando EXPLAIN gerada pelo banco de dados, e não apenas a consulta SQL estática.

O que significa um alerta de "Seq Scan" ou "Full Table Scan"?

Significa que o banco de dados leu a tabela inteira sequencialmente em vez de usar um índice, o que pode deixar a consulta lenta em tabelas grandes.

Como as sugestões de índices são geradas?

A ferramenta analisa os filtros aplicados (predicados) e as tabelas varridas no plano de execução para recomendar índices específicos nas colunas filtradas.

Documentação da API

Ponto final da solicitação

POST /pt/api/tools/sql-explain-plan-visualizer

Parâmetros da solicitação

Nome do parâmetro Tipo Requerido Descrição
explainOutput textarea Sim -
dialect select Não -
sql textarea Não -
maxDepth number Não -

Formato de resposta

{
  "result": "
Processed HTML content
", "error": "Error message (optional)", "message": "Notification message (optional)", "metadata": { "key": "value" } }
HTML: HTML

Documentação de MCP

Adicione este ferramenta à sua configuração de servidor MCP:

{
  "mcpServers": {
    "elysiatools-sql-explain-plan-visualizer": {
      "name": "sql-explain-plan-visualizer",
      "description": "Cole a saída do EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) para renderizar uma árvore de custos, marcar divergências entre linhas estimadas e reais e sugerir índices",
      "baseUrl": "https://elysiatools.com/mcp/sse?toolId=sql-explain-plan-visualizer",
      "command": "",
      "args": [],
      "env": {},
      "isActive": true,
      "type": "sse"
    }
  }
}

Você pode encadear várias ferramentas, ex: `https://elysiatools.com/mcp/sse?toolId=png-to-webp,jpg-to-webp,gif-to-webp`, máx 20 ferramentas.

Se você encontrar algum problema, por favor, entre em contato conosco em [email protected]