Diagnosticar uma consulta SQL lenta a partir do EXPLAIN ANALYZE
Lê o plano de execução de uma consulta SQL lenta nó a nó, encontra o estrangulamento e obtém índices ou reescritas concretas, com o respetivo custo nas escritas. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 5 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Avançado · Código · Pendente de revisão editorial
Prompt
Atua como DBA e especialista em desempenho de {{motor}}.
Tenho uma consulta lenta. Estes são os dados:
- Consulta:
{{consulta}}
- Saída do EXPLAIN (idealmente EXPLAIN ANALYZE com BUFFERS, ou FORMAT=TREE):
{{plano}}
- Tabelas, índices existentes e número aproximado de linhas: {{esquema}}
- Frequência de execução e tempo aceitável: {{contexto}}
Entregáveis:
1. Leitura do plano em linguagem simples, do nó mais interno para fora: o que faz cada nó, linhas estimadas e reais, e quanto tempo consome.
2. O estrangulamento principal e os secundários, com a evidência do plano que os comprova (leitura sequencial, estimativas muito erradas, ordenação em disco, nested loop com muitas linhas, filtro aplicado tarde, função sobre coluna indexada, etc.).
3. Correções ordenadas por impacto esperado e esforço:
- Índices com o `CREATE INDEX` exato (ordem das colunas justificada, índices parciais ou de cobertura quando úteis, criação sem bloqueio quando o motor o permitir).
- Reescrita da consulta se melhorar o plano (por exemplo `EXISTS` em vez de `IN`, paginação por chave, evitar `OR` sobre colunas diferentes).
- Estatísticas ou configuração (ANALYZE, estatísticas estendidas, memória de trabalho) só se o plano o justificar.
4. O custo de cada índice: espaço, impacto em INSERT/UPDATE e se duplica um índice existente.
5. Como verificar: o que voltar a executar e que mudança deve aparecer no plano.
Restrições:
- Baseia cada conclusão no plano; não prometas melhorias em percentagem nem em milissegundos.
- Se eu só tiver EXPLAIN sem ANALYZE, ou faltar informação do esquema, diz-mo e pede-ma antes de recomendar índices.
- Avisa-me se alguma ação bloquear tabelas em produção.Como utilizar
- Executa o EXPLAIN ANALYZE (no PostgreSQL acrescenta BUFFERS) num ambiente com dados realistas, não numa base vazia.
- Cola a consulta, o plano completo e a definição das tabelas e índices.
- Aplica primeiro a correção de maior impacto em pré-produção e compara o novo plano.
Exemplo de utilização
Motor: PostgreSQL 16 · Consulta: encomendas de um cliente nos últimos 90 dias ordenadas por data · Tabela encomendas: 12 milhões de linhas · Executada 300 vezes por minuto.
Exemplo de resultado
1. Leitura do plano
- Seq Scan on encomendas — percorre ~11,9 M linhas para ficar só com as de um cliente. Nenhum índice começa por
cliente_id. - Sort (external merge, Disk: 48MB) — ordena por
criado_emem disco porque não cabe emwork_mem. - Limit — todo esse trabalho para usar apenas 20 linhas.
2. Estrangulamento
Problema principal: o scan sequencial; o sort em disco é consequência dele. O plano está truncado (Filter: ...), por isso confirma as linhas reais do filtro com EXPLAIN (ANALYZE, BUFFERS).
3. Correção recomendada
-- Coluna de igualdade primeiro, depois a de intervalo/ordenação:
-- o índice devolve as linhas já ordenadas e o Limit pára nas 20
CREATE INDEX CONCURRENTLY idx_encomendas_cliente_criado
ON encomendas (cliente_id, criado_em DESC);
ANALYZE encomendas;
CONCURRENTLY não bloqueia escritas, mas demora mais e não pode correr dentro de uma transação (cuidado com ferramentas de migração que abrem uma por omissão).
4. Custo
| Aspeto | Impacto |
|---|---|
| Disco | Proporcional a 12 M entradas de duas colunas |
| Escritas | Mais um índice a manter em cada INSERT |
| Duplicados | Não se sobrepõe ao índice em estado |
5. Verificação
Volta a correr o EXPLAIN: deves ver Index Scan using idx_encomendas_cliente_criado e o nó Sort deve desaparecer…
Dados-chave
- Categoria
- Programação e desenvolvimento · SQL
- Tipo de resultado
- Código
- Nível
- Avançado
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Motor de base de dados, Consulta SQL, Plano de execução, Tabelas, índices e volume e Frequência e objetivo
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Porque preciso do EXPLAIN ANALYZE e não só do EXPLAIN?
O EXPLAIN só mostra estimativas. O EXPLAIN ANALYZE executa a consulta e mostra linhas e tempos reais; a diferença entre ambos é a pista mais útil. Como executa mesmo, testa UPDATE ou DELETE dentro de uma transação revertida.
Mais índices tornam sempre a base de dados mais rápida?
Não. Cada índice ocupa espaço e torna as escritas mais lentas. Por isso o prompt pede o custo de cada um e procura duplicados.
Para que serve este prompt?
Lê o plano de execução de uma consulta SQL lenta nó a nó, encontra o estrangulamento e obtém índices ou reescritas concretas, com o respetivo custo nas escritas.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Motor de base de dados, Consulta SQL, Plano de execução, Tabelas, índices e volume e Frequência e objetivo). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.