O WordPress armazena tudo numa base de dados MySQL (ou MariaDB). Com o tempo, esta base de dados “incha”, acumulando dados desnecessários, o que pode abrandar consultas e todo o site. Uma base de dados maior significa tempos de backup mais longos, consultas SELECT mais lentas e Time To First Byte (TTFB) aumentado.
Neste guia completo para desenvolvedores, vamos passar pela otimização avançada da base de dados – desde a limpeza simples até à análise de consultas e configuração do InnoDB.
Por que a otimização da base de dados é crítica em 2026
Em 2026, quando um TTFB abaixo de 100ms é o padrão, uma base de dados “pesada” é uma âncora para o seu site. Mesmo que tenha um servidor super rápido (PHP 8.4, NVMe), consultas SQL mal otimizadas podem matar o desempenho.
Principais causas de problemas na base de dados:
- Bloatware (Excesso de Dados): Revisões de posts, spam de comentários, metadados órfãos.
- Autoloaded Options: Dados carregados a cada atualização de página, mesmo sem serem usados.
- Falta de Índices: Consultas que devem verificar toda a tabela (Full Table Scan).
- Fragmentação de Tabelas: Lacunas nos dados que aumentam o tamanho do ficheiro em disco.
Parte 1: Higiene da base de dados (limpeza)
Vamos começar removendo o lixo. Pode fazer isso com um plugin (WP-Optimize), mas como desenvolvedor, deve saber como fazê-lo “manualmente” usando SQL ou WP-CLI.
1. Revisões de posts
Sempre que clica em “Guardar Rascunho”, é criada uma nova cópia do post. Com longas sessões de edição, pode ter centenas de revisões para um único artigo.
Consulta SQL para Verificar Contagem de Revisões:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
Apagar Revisões (SQL):
DELETE FROM wp_posts WHERE post_type = 'revision';
Recomendado: Usar WP-CLI (Mais Seguro):
wp post delete $(wp post list --post_type='revision' --format=ids) --force
2. Limpar spam e lixo
Não faz sentido manter spam ou posts apagados.
SQL:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';
3. Transients (dados temporários)
Transients são cache guardado na base de dados (wp_options). Às vezes, transients expirados não são removidos automaticamente.
SQL para Limpar Transients Expirados:
DELETE FROM wp_options WHERE option_name LIKE ('_transient_timeout%') OR option_name LIKE ('_transient_%');
WP-CLI (Melhor Método):
wp transient delete --all
Parte 2: Autoloaded options (o assassino silencioso de desempenho)
A tabela wp_options contém uma coluna autoload. Se definida como yes, essa opção é carregada a cada carregamento de página.
Plugins frequentemente deixam lixo aqui após a desinstalação.
Como diagnosticar?
Verifique quantos dados (em bytes) estão a ser carregados automaticamente:
SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload = 'yes';
Se o resultado exceder 800 KB - 1 MB, tem um problema.
Como encontrar as maiores opções?
SELECT option_name, LENGTH(option_value) as option_size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_size DESC
LIMIT 10;
Muitas vezes encontrará dados antigos de plugins de cache, construtores ou logs aqui. Se o plugin já não for usado, pode apagar com segurança estas opções ou alterar autoload para no.
Parte 3: InnoDB vs MyISAM
Em 2026, já não deve usar o motor MyISAM. O InnoDB é o padrão, oferecendo:
- Bloqueio ao nível da linha (Row-level locking): MyISAM bloqueia toda a tabela na escrita.
- Transações ACID: Segurança de dados.
- Chaves Estrangeiras: Consistência de relacionamentos.
Verificar motor da tabela:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nome_da_sua_base_de_dados';
Converter para InnoDB:
Se encontrar tabelas MyISAM, converta-as:
ALTER TABLE wp_posts ENGINE=InnoDB;
ALTER TABLE wp_comments ENGINE=InnoDB;
ALTER TABLE wp_options ENGINE=InnoDB;
-- e assim por diante para todas as tabelas
Parte 4: Indexação (avançado)
O WordPress geralmente tem bons índices padrão, mas plugins frequentemente adicionam as suas próprias tabelas sem índices adequados. A falta de um índice numa consulta WHERE ou JOIN significa que o MySQL deve verificar cada linha da tabela.
Exemplo: Pesquisa lenta no WooCommerce
Se tem uma loja com 100.000 encomendas, e um plugin pesquisa encomendas por meta_key sem índice, a página “A Minha Conta” pode demorar 10 segundos a carregar.
Solução: Adicione índices às colunas que pesquisa ou ordena frequentemente.
CREATE INDEX idx_meta_key_value ON wp_postmeta (meta_key(191), meta_value(50));
(Nota: Indexar meta_value é complicado porque é TEXT. Evite pesquisar por meta_value se possível).
Parte 5: Prevenção (configurar wp-config.php)
Em vez de limpar constantemente, é melhor não sujar. Configure o WordPress sabiamente.
Limitar revisões
Adicione ao wp-config.php:
// Limitar a 5 versões recentes
define( 'WP_POST_REVISIONS', 5 );
// Esvaziar lixo a cada 7 dias (padrão é 30)
define( 'EMPTY_TRASH_DAYS', 7 );
// Aumentar intervalo de autosave (menos pedidos AJAX no editor)
define( 'AUTOSAVE_INTERVAL', 300 ); // segundos
Desativar edição de ficheiros
Para segurança e higiene:
define( 'DISALLOW_FILE_EDIT', true );
Parte 6: Ferramentas de monitorização (query monitor)
Não adivinhe o que atrasa o site. Instale o plugin Query Monitor. Após a instalação, na barra de administração, verá o tempo de geração da página e o número de consultas SQL.
- Clique nas estatísticas na barra.
- Vá ao separador “Queries”.
- Ordene por “Time”.
Se vir uma consulta que demora 0,5s ou mais – esse é o seu alvo de otimização. Frequentemente vem de um plugin mal escrito (“Produtos Vistos Recentemente”, “Contador de Visitas”, etc.).
Resumo: Lista de verificação de otimização
- Backup: Faça sempre backup antes de trabalhar na base de dados.
- Motor: Garanta que todas as tabelas são InnoDB.
- Autoload: Verifique o tamanho de
autoloaded options(apontar para < 800KB). - Limpeza: Remova revisões, spam e transients expirados.
- Índices: Verifique se consultas pesadas usam índices.
- Prevenção: Configure
wp-config.phppara limitar a criação de lixo.
Quando a sua base de dados é leve e rápida, o PHP usa menos memória e os utilizadores recebem conteúdo instantaneamente. Esta é a fundação do WordPress moderno.



