MySQL e MariaDB lentos? 12 causas comuns (e como resolver)
Doze causas que deixam MySQL e MariaDB lentos, do índice que falta ao disco que não aguenta, com o comando para confirmar cada uma.

"O banco está lento." Em 25 anos ouvi essa frase mais vezes do que "bom dia". E quase nunca o culpado é o MySQL ou o MariaDB em si: é o que fizemos com eles. A boa notícia é que as causas se repetem. Aqui estão as doze que eu mais encontro.
Resumo rápido: Doze causas que deixam MySQL e MariaDB lentos, do índice que falta ao disco que não aguenta, com o comando para confirmar cada uma.
Série MySQL e MariaDB na prática: comandos válidos para MySQL 8.x e MariaDB 10.6+/11.x, com as diferenças indicadas quando existem.
Antes de tudo: lento onde?
usuário reclama
│
├─ uma tela só? → provavelmente uma query (causas 1 a 5)
├─ tudo, o tempo todo? → configuração ou hardware (causas 6 a 9)
└─ tudo, em picos? → concorrência, locks, jobs (causas 10 a 12)
1. Falta de índice
A campeã absoluta. Sem índice, o MySQL/MariaDB lê a tabela inteira (full table scan).
EXPLAIN SELECT * FROM pedidos WHERE cliente_id = 42;
-- type: ALL rows: 3.000.000 ← alerta vermelho
CREATE INDEX idx_pedidos_cliente ON pedidos (cliente_id);
2. Índice que existe, mas não é usado
Função na coluna, tipo diferente ou curinga no começo matam o índice:
WHERE YEAR(criado_em) = 2026 -- não usa índice
WHERE criado_em >= '2026-01-01' AND criado_em < '2027-01-01' -- usa
WHERE cpf = 12345678900 -- cpf é VARCHAR: conversão implícita
WHERE nome LIKE '%silva' -- curinga no início
3. SELECT * e colunas demais
Trazer 40 colunas (com TEXT e BLOB) para usar 3 desperdiça disco, memória e rede, e impede índices de cobertura.
4. N+1 queries
A aplicação faz 1 consulta para a lista e 1 para cada item. Mil itens, mil e uma viagens ao banco. Resolva com JOIN ou WHERE id IN (...).
5. Paginação com OFFSET gigante
SELECT * FROM logs ORDER BY id LIMIT 20 OFFSET 500000; -- lê 500.020 linhas
SELECT * FROM logs WHERE id > 500000 ORDER BY id LIMIT 20; -- keyset: lê 20
6. Buffer pool pequeno
Se os dados mais usados não cabem na memória, tudo vira leitura de disco.
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads'; -- leituras do disco
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests'; -- leituras totais
Detalhes em como otimizar o InnoDB buffer pool.
7. Redo log pequeno
Com redo log pequeno, o InnoDB faz checkpoints agressivos e a escrita engasga. No MySQL 8.0.30+ ajuste innodb_redo_log_capacity; no MariaDB, innodb_log_file_size.
8. Disco lento ou saturado
iostat -x 1 # %util perto de 100 e await alto = disco é o gargalo
9. Swap
Banco em swap é banco parado. Memória demais para buffers por conexão (sort_buffer_size, join_buffer_size altos multiplicados por centenas de conexões) é causa clássica.
10. Locks e transações longas
Uma transação aberta esquecida segura locks e impede o purge. Veja locks e deadlocks no MySQL e MariaDB.
SELECT trx_id, trx_started, trx_mysql_thread_id, trx_query
FROM information_schema.innodb_trx ORDER BY trx_started LIMIT 5;
11. Conexões demais
Milhares de conexões simultâneas disputando CPU. Use pool na aplicação; no MariaDB, o thread pool gratuito ajuda muito.
12. Estatísticas desatualizadas
O otimizador escolhe o plano com base em estatísticas. Depois de cargas grandes, rode ANALYZE TABLE pedidos;.
Por onde começar
Ative o slow query log e ataque as consultas que mais somam tempo. O passo a passo está em como encontrar queries lentas no MySQL e MariaDB. Para uma visão completa do servidor, faça um health check.
A série completa: MySQL e MariaDB na prática
- MySQL e MariaDB lentos? 12 causas comuns (e como resolver)
- Como fazer um health check completo no MySQL e MariaDB
- MySQL e MariaDB travando? Entenda locks e deadlocks
- Como otimizar o InnoDB buffer pool no MySQL e MariaDB
- Como encontrar queries lentas no MySQL e MariaDB
- Índices no MySQL e MariaDB: quando criar e quando remover
- Consultoria MySQL e MariaDB: quando vale a pena contratar um DBA especializado?
- DBA remoto para MySQL e MariaDB: como funciona?
- Assessment MySQL e MariaDB: o que é avaliado?
- Backup e disaster recovery no MySQL e MariaDB
Precisa de ajuda especializada?
Se o seu ambiente MySQL ou MariaDB precisa de diagnóstico, otimização, backup confiável ou acompanhamento contínuo, conheça a HTI Tecnologia, especialista em bancos de dados.
Ainda decidindo entre os dois? Leia MySQL ou MariaDB: qual é o melhor? e o guia definitivo de MySQL.
Quer dominar a base que os dois compartilham?
MariaDB nasceu do MySQL, e tudo o que é fundamento (modelagem, índices, transações, replicação, otimização) vale para os dois. É isso que eu ensino no livro Aprendendo MySQL: Prática, Teoria, Laboratórios, Desafios e Projetos: 292 páginas, 10 laboratórios guiados, 277 exercícios e 4 desafios com gabarito, e uma máquina virtual pronta para você quebrar (e consertar) à vontade.
Conheça o livro e leia a degustação gratuita.
Bora trocar ideia?
Se este artigo te ajudou (ou te fez discordar, que também vale), me siga no LinkedIn e no Instagram. Lá eu posto bastidores de banco de dados, história da computação e histórias de produção que ninguém conta em curso oficial.
Sobre o autor: Alexandre Almeida atua com bancos de dados há mais de 25 anos, foi instrutor oficial de MySQL e Oracle para mais de 1.000 alunos e escreveu Aprendendo MySQL: Prática, Teoria e Laboratórios.
Fontes: MySQL 8.4 Reference Manual (Oracle), MariaDB Server Documentation (MariaDB Knowledge Base), documentação do Percona Toolkit e do Percona XtraBackup. Imagem de capa: ilustração gerada por IA (desenvolvedor frustrado diante de um laptop com ícone de carregamento).