Como otimizar consultas em banco de dados lentas (Dicas práticas de SQL)
Você desenvolveu uma aplicação incrível, mas quando a colocou em produção com dados reais, algumas telas demoram segundos (ou até minutos) para carregar. Na maioria esmagadora das vezes, o gargalo não está na linguagem de programação, mas sim no Banco de Dados devido a consultas SQL mal elaboradas.
Neste guia, vamos focar em otimizações práticas para bancos de dados relacionais (PostgreSQL, MySQL, SQL Server) que você pode aplicar hoje mesmo para ver um ganho imediato de performance.
1. O fim do famigerado SELECT *
A regra de ouro da performance é trafegar o mínimo de dados possível. Usar SELECT * FROM tabela força o banco a ler e transferir todas as colunas, mesmo aquelas que sua aplicação não vai utilizar (como textos longos ou arquivos binários).
-- Ruim SELECT * FROM clientes WHERE status = 'ativo'; -- Excelente SELECT id, nome, email FROM clientes WHERE status = 'ativo';
2. Crie Índices (Indexes) com sabedoria
Se você filtra muito por uma coluna específica (por exemplo, WHERE email = ?), essa coluna DEVE ter um índice. Um índice funciona como o sumário de um livro: o banco não precisa ler a tabela inteira (Table Scan) para achar um registro.
Mas atenção: não indexe todas as colunas. Cada índice aumenta o tempo das operações de escrita (INSERT, UPDATE), pois o sumário precisa ser recalculado. Indexe apenas colunas frequentemente usadas em cláusulas WHERE, JOIN, ou ORDER BY.
3. Use EXPLAIN para entender o banco
Para descobrir o porquê uma consulta está lenta, basta colocar a palavra EXPLAIN (ou EXPLAIN ANALYZE no Postgres) antes da sua query. O banco devolverá o "Plano de Execução", mostrando onde ele está gastando mais tempo (se está usando índices ou varrendo a tabela toda).
4. Cuidado com funções na cláusula WHERE
Se você aplicar uma função sobre uma coluna no WHERE, o banco de dados frequentemente ignora o índice dessa coluna, pois ele precisa calcular o resultado da função para cada linha antes de comparar.
-- Ruim (Ignora o índice da coluna data_criacao) SELECT id FROM pedidos WHERE YEAR(data_criacao) = 2026; -- Bom (Usa o índice de datas perfeitamente) SELECT id FROM pedidos WHERE data_criacao >= '2026-01-01' AND data_criacao < '2027-01-01';
Conclusão
Otimizar banco de dados é um processo contínuo. Ao focar em trazer apenas as colunas necessárias, estruturar bons índices e observar o comportamento das queries com o EXPLAIN, você resolverá mais de 90% dos gargalos de performance nas suas APIs.