🛠️

SQL Query Optimizer

Cole sua query · Receba análise de performance · Faça perguntas

PostgreSQL MySQL SQL Server Oracle BigQuery Snowflake SQLite
📖 Como usar
  1. Cole sua query SQL no editor de código (SELECT, JOIN, subquery, procedure — qualquer dialeto)
  2. Informe o banco de dados se quiser análise específica: PostgreSQL, MySQL, SQL Server, BigQuery, etc.
  3. Clique em Otimizar Query ou pressione Ctrl + Enter
  4. Leia a análise, copie a query otimizada e aplique os índices sugeridos
✅ Resultado esperado: Query reescrita com melhor performance, explicação de cada otimização aplicada, sugestão de índices e estimativa de ganho — tudo comentado e pronto para usar em produção.

Anti-patterns detectados

SELECT *, subqueries correlacionadas, funções em WHERE, LIKE '%texto', OR sem índice

Sugestões de índice

O agente sugere índices compostos, covering indexes e identifica missing indexes

Conversa iterativa

Se precisar de mais contexto (volume, EXPLAIN), o agente pergunta antes de otimizar

Perguntas Frequentes

O que é otimização de queries SQL?

Otimização de queries SQL é o processo de reescrever ou ajustar comandos SQL para que sejam executados de forma mais eficiente — consumindo menos tempo de CPU, memória e I/O de disco. Uma query mal escrita pode levar minutos para retornar dados que uma query otimizada entrega em milissegundos, mesmo acessando a mesma tabela. O SQL Query Optimizer analisa seu código e sugere reescritas, índices e boas práticas de forma automática.

Quando devo usar índices em tabelas SQL?

Índices são úteis em colunas frequentemente utilizadas em cláusulas WHERE, JOIN ON, ORDER BY e GROUP BY. Evite criar índices em colunas com baixa cardinalidade (poucos valores distintos, como flags boolean). Índices compostos fazem sentido quando você filtra por múltiplas colunas juntas — a ordem das colunas no índice importa e deve seguir a ordem dos filtros mais seletivos primeiro. Lembre que índices aceleram leituras mas aumentam o custo de escritas (INSERT, UPDATE, DELETE).

O que é um plano de execução e como interpretá-lo?

O plano de execução é o roteiro que o banco de dados escolhe para processar sua query. No SQL Server, use SET STATISTICS IO ON ou pressione Ctrl+M no SSMS para visualizá-lo graficamente. Os operadores mais custosos são Table Scan (leitura de toda a tabela) e Hash Match (junção sem índice). Prefira Index Seek (acesso direto via índice) e Nested Loops (junções eficientes). Operadores com largura de seta grossa no plano indicam maior volume de dados processados.

Qual a diferença entre INNER JOIN, LEFT JOIN e EXISTS?

INNER JOIN retorna somente linhas com correspondência nas duas tabelas. LEFT JOIN retorna todas as linhas da tabela à esquerda, mesmo sem correspondência à direita (valores NULL para as colunas da direita). EXISTS é preferível ao IN quando a subconsulta retorna muitas linhas, pois para a busca assim que encontra a primeira correspondência. Para verificar existência de registros relacionados, EXISTS costuma ser mais performático que COUNT(*) > 0.

Como identificar queries lentas no SQL Server?

Use a DMV sys.dm_exec_query_stats para listar as queries com maior tempo médio de execução ou maior consumo total de CPU. O Query Store (disponível a partir do SQL Server 2016) rastreia o histórico de planos de execução e facilita a identificação de regressões de performance após atualizações. Também é possível usar o SQL Server Profiler ou Extended Events para capturar queries com duração acima de um limiar definido.

O que é normalização e quando desnormalizar é aceitável?

Normalização é o processo de organizar tabelas para eliminar redundância e garantir integridade dos dados. As três primeiras formas normais (1FN, 2FN, 3FN) resolvem a maioria dos problemas práticos. Desnormalização — armazenar dados redundantes propositalmente — é aceitável em data warehouses e sistemas de relatórios onde a velocidade de leitura é prioritária e a atualização dos dados é controlada (ETL batch). Em sistemas OLTP transacionais, mantenha a normalização para evitar anomalias de inserção e atualização.