SQL Query de 45s para 0.8s: O Diagnóstico Completo SQL sênior não é escrever queries complexas. É saber ONDE o banco está sofrendo. Neste post, vou mostrar como diagnosticar e corrigir queries lentas usando EXPLAIN ANALYZE — e ganhar 98% de velocidade sem mudar uma linha de lógica. O Problema Query que você escreveu rodava em 45 segundos. Inaceitável. Você pensa em reescrever tudo. Errado. A maioria dos problemas de performance não está na lógica — está em onde o dado está sendo buscado (ou não sendo buscado). Aqui está como encontrar exatamente o problema. 1. EXPLAIN ANALYZE: A Ferramenta de Diagnóstico EXPLAIN ANALYZE não muda sua query. Ele executa e mostra exatamente o que o banco fez: O output vai parecer algo assim: O que significa? Seq Scan = table scan completo. O banco leu a tabela inteira. Se você tem 1 milhão de linhas e precisa só de 1000, isso é desperdício. 2. Identificar o Bottleneck O gargalo geralmente está em um lugar óbvio quando você vê EXPLAIN ANALYZE: Problema 1: Seq Scan em Tabela Grande Significa: o banco scaneou 1 milhão de linhas para achar as que têm . Problema 2: Falta de Índice na Coluna de Join Se o join é caro e usa Hash, significa que não há índice na coluna de relacionamento. Problema 3: Sem Índice Composto Você tem índice em separado, mas precisa de índice que cobre BOTH colunas de WHERE e ORDER BY. 3. Criar os Índices Certos Aqui está a solução: Mas NÃO crie índices sem pensar. Cada índice: ✅ Melhora SELECT ❌ Deixa INSERT/UPDATE mais lento ❌ Consome espaço em disco 4. Testar e Medir Depois de criar os índices, rode EXPLAIN ANALYZE de novo: Agora o output deve ser: Index Scan = o banco usou índice. Leu 5000 linhas em vez de 1 milhão. Velocidade: de 45 segundos para 0.8 segundos. Exemplo Completo: Passo a Passo Query Original (Lenta) Passo 1: EXPLAIN ANALYZE Resultado: Problema: O banco scaneou 500 mil linhas da tabela de transações. Passo 2: Criar Índices Passo 3: Verificar Novamente Resultado esperado: Resultado: De 500k linhas lidas para 5k linhas. Velocidade: 45s → 0.8s. Erros Comuns de Otimização ❌ Criar índice em toda coluna Índice caro, pouco benefício. Foco em colunas de WHERE e JOIN. ❌ Criar índice sem medir antes Rode EXPLAIN ANALYZE PRIMEIRO. Depois crie índice. ❌ Assumir que reescrever query é sempre melhor 90% das vezes o problema é índice, não lógica. ✅ Medir → Diagnosticar → Criar Índice → Medir de Novo Essa é a sequência que funciona. Resumo da Estratégia 1. EXPLAIN ANALYZE: rodar na query lenta 2. Procurar por "Seq Scan": onde está o desperdício 3. Criar índice nas colunas de WHERE ou JOIN 4. Testar novamente: confirmar melhoria 5. Monitorar: verificar se outros queries ficaram mais lentos Uma query de 45 segundos para 0.8 segundos não é exagero. É o que acontece quando você indexa o lugar certo. SQL sênior é ler EXPLAIN ANALYZE e saber exatamente o que fazer. Aprofunde seus conhecimentos em SQL Avançado na Elite Data Academy — aprenda otimização, window functions, CTEs e muito mais com projetos reais.