Banco de Dados & Backend

Otimização de Bancos de Dados Relacionais: Índices B-Tree, Explain Analyze e Eliminação de Queries Lentas

Edson Feitosa de Oliveira Júnior
Edson Feitosa de Oliveira Júnior
Fundador & Desenvolvedor Full Stack

O sistema estava rápido no lançamento, mas, com o crescimento dos dados, telas começam a demorar segundos para abrir e relatórios travam. Na grande maioria dos casos, a causa está em algumas poucas consultas ao banco de dados sem os índices certos. Este guia mostra como encontrar essas consultas no MySQL e no PostgreSQL, ler o plano de execução e corrigir com índices e ajustes simples.

Passo 1: encontre as consultas lentas

MySQL

Ative o slow query log, que registra consultas acima de um tempo definido:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

Depois, analise o arquivo de log com a ferramenta mysqldumpslow ou consulte o performance_schema.

PostgreSQL

Ative a extensão pg_stat_statements (incluindo-a em shared_preload_libraries e criando a extensão) e consulte as mais custosas:

SELECT query, calls, mean_exec_time, total_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

Comece pelas consultas com maior tempo total: uma consulta de 50 ms chamada 100 mil vezes pesa mais que uma de 5 segundos chamada uma vez.

Passo 2: leia o plano de execução

Coloque EXPLAIN ANALYZE antes da consulta. O banco executa e mostra como buscou os dados:

EXPLAIN ANALYZE
SELECT * FROM pedidos WHERE cliente_id = 123 ORDER BY criado_em DESC;

Sinais de problema:

Passo 3: crie os índices certos

Índices B-Tree, o tipo padrão, funcionam como o índice de um livro: permitem achar linhas sem ler tudo.

CREATE INDEX idx_pedidos_cliente_data ON pedidos (cliente_id, criado_em);

Regras práticas:

Passo 4: corrija padrões que anulam índices

Passo 5: manutenção do banco

Antes de comprar um servidor maior

Aumentar o servidor resolve temporariamente, mas consultas sem índice continuam piorando conforme os dados crescem. Um índice certo costuma transformar segundos em milissegundos. Monitore, corrija as consultas mais pesadas e só então avalie hardware. Para manutenção do servidor, veja manutenção preventiva, e para lentidão do lado do site, por que seu site está lento.

Consultoria Backend PruPru

Desenvolvemos sistemas backend robustos em Java (Spring Boot) e Node.js com arquitetura de banco de dados ultra-otimizada.

Falar com o Desenvolvedor →

Perguntas frequentes

Como descobrir quais consultas estão lentas?

No MySQL, ative o slow query log. No PostgreSQL, use a extensão pg_stat_statements. Comece pelas consultas com maior tempo total acumulado.

Criar muitos índices deixa o banco mais rápido?

Não necessariamente. Índices aceleram leituras, mas deixam inserções e atualizações mais lentas e ocupam espaço. Crie índices com base nas consultas reais do sistema.

O que o EXPLAIN ANALYZE mostra?

Mostra como o banco executou a consulta: se usou índices ou leu a tabela inteira, quantas linhas processou e quanto tempo cada etapa levou.

Falar no WhatsApp agora