SQL Query Optimizer
Cole sua query · Receba análise de performance · Faça perguntas
📖 Como usar
- Cole sua query SQL no editor de código (SELECT, JOIN, subquery, procedure — qualquer dialeto)
- Informe o banco de dados se quiser análise específica: PostgreSQL, MySQL, SQL Server, BigQuery, etc.
- Clique em Otimizar Query ou pressione Ctrl + Enter
- Leia a análise, copie a query otimizada e aplique os índices sugeridos
Estas regras serão injetadas no contexto da IA e respeitadas em toda a conversa.
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
Cole o output do EXPLAIN, informe volume de linhas ou índices existentes para uma análise mais precisa
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.