EXPLAIN PLAN — Como Descobrir Por Que Sua Query Está Lenta Uma das situações mais frustrantes em analytics é: sua query roda em 5 minutos, você não sabe por quê, e não tem como debugar. Você culpa o banco. Seu DBA culpa a query. Ninguém descobre o gargalo. Existe uma ferramenta que resolve isso em segundos: EXPLAIN PLAN (ou EXPLAIN ANALYZE em PostgreSQL). Profissional sênior roda EXPLAIN antes de reclamar que query é lenta. Porque 90% das vezes, o problema não é a lógica. É a execução. 1. O Que É EXPLAIN PLAN EXPLAIN PLAN mostra exatamente como seu banco vai executar uma query antes de executar de verdade. É como um "simulador" da execução. O banco diz: > "Para essa query, vou fazer assim: ler essa tabela inteira, depois filtrar, depois joinar com aquela outra tabela..." E te mostra o tempo estimado que vai gastar em cada etapa. Resultado típico: Traduzindo: banco fez um "Seq Scan" (leu TODA a tabela linha por linha) e depois filtrou. Isso demorou 4.8 segundos. O problema é óbvio: nenhum índice foi usado. 2. Os 3 Sinais Que Revelam Gargalos Quando você roda EXPLAIN ANALYZE, procure por esses padrões: Sinal 1: "Seq Scan" Quando Deveria Ser "Index Scan" Tradução: banco está lendo TODA a tabela. Linha por linha. Sem índice. Causa: você não tem índice na coluna WHERE, ou tem mas não é bom o suficiente. Solução: criar índice. Depois rode EXPLAIN de novo. Se agora disser "Index Scan", ganhou. Sinal 2: "Nested Loop" Quando Deveria Ser "Hash Join" Nested Loop = para cada linha da tabela1, roda a query da tabela2. Se tabela1 tem 1M linhas, roda 1M vezes a query. Hash Join = ambas as tabelas são lidas uma vez, depois juntadas via hash. Muito mais rápido. Solução: garantir que a coluna de join tem índice, e que o banco a utiliza. Sinal 3: "Sort" Quando Você Não Pediu Se você pediu , isso é esperado. Mas se não pediu, o banco está criando um sort que você não precisa. Causa típica: subquery sem índice forçando ordenação. 3. O Ciclo de Debug (Funciona Sempre) Passo 1: Roda EXPLAIN Passo 2: Identifica o Gargalo Procura por: Seq Scan em tabelas grandes Nested Loop em joins Sort desnecessário Passo 3: Cria Índice (Se Necessário) Se viu Seq Scan na coluna : Passo 4: Roda EXPLAIN Novamente Compare: Antes: Depois: Ganho: 4823ms → 32ms. Ou seja, 150x mais rápido. Isso é real. Profissional sênior faz isso rotineiramente. 4. Erros Comuns (E Como Evitar) Erro 1: Índice na Coluna Errada Solução: colocar índice na coluna que aparece em WHERE. Erro 2: Índice Composto na Ordem Errada Ordem importa. Se você filtra data primeiro, colocar data primeiro no índice. Erro 3: Não Roda EXPLAIN Após Criar Índice Depois que cria índice, o banco precisa "aprender" sobre ele (estatísticas). Alguns bancos fazem auto-análise. Mas é bom rodar: 5. Quando EXPLAIN Não Resolve (E O Que Fazer) Rodou EXPLAIN, criou índice, mas query ainda demora? Cenário 1: Tabela Gigante (Bilhões de Linhas) Índice já está lá, banco já tá usando. Mas a query ainda é lenta porque: Você pede MUITOS dados (SELECT *, não colunas específicas) Você junta muitas tabelas JOIN está fazendo Nested Loop apesar de ter índice Solução: particionar dados (por data), ou usar ferramentas de scaling (Spark, BigQuery). Cenário 2: Query Complexa Com Múltiplos Joins Cada JOIN tem custo. Se tem 4 joins, o banco precisa calcular 4 diferentes caminhos de execução. Solução: simplificar query, ou usar CTE para quebrar em partes. Cenário 3: Dados Muito Dinâmicos Se dados mudam constantemente, índices ficam fragmentados. Performance degrada ao longo do tempo. Solução: rodar REINDEX periodicamente. 6. O Padrão de Sênior em SQL 1. Escreve query simples 2. Roda EXPLAIN ANALYZE 3. Vê Seq Scan? Cria índice 4. Vê Nested Loop? Revisita JOIN 5. Vê Sort desnecessário? Refatora subquery Isso leva 5 minutos. E a query que levava 5 minutos agora leva 50ms. Esse é o trabalho real de analytics. Não é escrever query complexa. É saber onde o banco está sofrendo. Quer dominar SQL de verdade? Inscreva-se na Elite Data Academy e aprenda SQL avançado com quem debuga queries em produção todo dia. Temos módulo completo sobre performance, índices e EXPLAIN PLAN com exemplos reais.