Como Otimizar o Desempenho do MySQL
Guia completo para otimização do desempenho do banco de dados MySQL: ajuste de configuração, otimização de consultas, indexação e monitoramento.

A otimização de desempenho do MySQL é crucial para aplicações que lidam com grandes quantidades de dados ou alto tráfego. Este guia cobre técnicas essenciais para melhorar o desempenho do MySQL, desde ajustes de configuração até otimização de consultas.
Otimizando Configuração do MySQL
Edite o arquivo de configuração do MySQL para otimizar o desempenho com base nos recursos do seu servidor:
# Editar configuração do MySQL (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Editar configuração do MySQL (CentOS/RHEL)
sudo nano /etc/my.cnf
# Adicionar ou modificar estas configurações:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M
# Reiniciar MySQL
sudo systemctl restart mysql # Ubuntu/Debian
sudo systemctl restart mysqld # CentOS/RHELOtimização InnoDB
InnoDB é o mecanismo de armazenamento padrão do MySQL. Otimize-o para melhor desempenho:
# Em /etc/mysql/mysql.conf.d/mysqld.cnf ou /etc/my.cnf
[mysqld]
# Pool de buffer InnoDB (use 70-80% da RAM disponível)
innodb_buffer_pool_size = 2G
# Tamanho do arquivo de log InnoDB
innodb_log_file_size = 512M
# Método de flush InnoDB (para SSD)
innodb_flush_method = O_DIRECT
# Threads I/O InnoDB
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# Flush de log InnoDB no commit da transação
innodb_flush_log_at_trx_commit = 2Configuração de Cache de Consultas
O cache de consultas pode melhorar o desempenho para cargas de trabalho intensivas em leitura (Nota: O cache de consultas está obsoleto no MySQL 8.0):
# Para MySQL 5.7 e anteriores
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
# Verificar status do cache de consultas
mysql> SHOW VARIABLES LIKE 'query_cache%';
# Verificar estatísticas do cache de consultas
mysql> SHOW STATUS LIKE 'Qcache%';Otimização de Índices
A indexação adequada é crucial para o desempenho das consultas:
# Analisar tabela para atualizar estatísticas de índice
ANALYZE TABLE table_name;
# Verificar índices não utilizados
SELECT * FROM sys.schema_unused_indexes;
# Criar índice
CREATE INDEX idx_column ON table_name(column_name);
# Criar índice composto
CREATE INDEX idx_multi ON table_name(col1, col2, col3);
# Mostrar índices
SHOW INDEXES FROM table_name;
# Remover índice não utilizado
DROP INDEX idx_name ON table_name;Otimização de Consultas
Otimize suas consultas SQL para melhor desempenho:
- Use EXPLAIN para analisar planos de execução de consultas: EXPLAIN SELECT * FROM table WHERE column = 'value'
- Evite SELECT * - selecione apenas colunas necessárias
- Use LIMIT para restringir conjuntos de resultados
- Use cláusulas WHERE adequadas com colunas indexadas
- Evite funções em cláusulas WHERE (ex.: WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
- Use JOINs em vez de subconsultas quando possível
- Use UNION em vez de OR para múltiplas condições quando apropriado
Monitorando Desempenho do MySQL
# Verificar status do MySQL
mysql> SHOW STATUS;
# Verificar consultas lentas
mysql> SHOW VARIABLES LIKE 'slow_query%';
# Habilitar log de consultas lentas
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
# Verificar lista de processos
mysql> SHOW PROCESSLIST;
# Verificar status da tabela
mysql> SHOW TABLE STATUS LIKE 'table_name';
# Verificar status InnoDB
mysql> SHOW ENGINE INNODB STATUS;Dicas de Otimização de Desempenho
- Execute regularmente OPTIMIZE TABLE para desfragmentar tabelas
- Monitore o log de consultas lentas e otimize consultas lentas
- Use pool de conexões para reduzir sobrecarga de conexão
- Particione tabelas grandes por data ou intervalo para melhor desempenho
- Use réplicas de leitura para cargas de trabalho intensivas em leitura
- Mantenha o MySQL atualizado para a versão estável mais recente
- Monitore I/O do disco e considere usar armazenamento SSD/NVMe
- Use EXPLAIN ANALYZE (MySQL 8.0+) para análise detalhada de consultas