# Como otimizar o banco de dados WordPress para velocidade

Otimizar o banco de dados do WordPress é limpar e reorganizar as tabelas MySQL que acumulam dados desnecessários e ficam lentas com o tempo. O inchaço costuma vir de revisões de post, transients expirados, comentários de spam e tabelas órfãs deixadas por plugins removidos, que aumentam o tempo de cada query.

## O que é a otimização do banco de dados do WordPress?

A otimização do banco de dados do WordPress é o processo de remover dados acumulados e reduzir o tamanho das tabelas MySQL para que cada consulta responda mais rápido. Com o tempo, o WordPress guarda revisões de cada post, rascunhos automáticos, transients que nunca expiram, comentários de spam na lixeira e metadados órfãos de plugins desinstalados. Esse acúmulo incha a tabela wp_options e as wp_postmeta, deixando as queries lentas e elevando o TTFB de todas as páginas dinâmicas. A otimização envolve apagar o lixo, recuperar o espaço com OPTIMIZE TABLE e garantir índices nas colunas mais consultadas.

## Como identificar

- O painel do WordPress (wp-admin) demora a carregar mesmo com poucos plugins ativos.
- O diagnóstico "Reduzir o tempo de resposta do servidor (TTFB)" aparece como oportunidade no PageSpeed Insights.
- A ferramenta Site Health do WordPress aponta a tabela wp_options com autoload grande demais.
- Páginas e buscas internas demoram, e o log de queries lentas do MySQL registra consultas acima de 1 segundo.

**Antes de começar:** Faça backup completo do banco antes de rodar qualquer comando DELETE, OPTIMIZE TABLE ou ALTER TABLE. Essas operações são irreversíveis e, em tabelas grandes, podem bloquear o site durante a execução; rode em horário de baixo tráfego.

## Como prevenir

- Defina um limite de revisões no wp-config.php e agende limpezas periódicas de transients e spam
- Desinstale plugins removendo também os dados que eles deixam nas tabelas wp_options e wp_postmeta
- Monitore o log de queries lentas e o tamanho do autoload com regularidade para pegar o inchaço cedo

Erros relacionados

- [Como otimizar o wp_options para reduzir queries lentas](https://full.services/wp-fixer/otimizar-wp-options-queries-lentas/)
- [Como corrigir Reduce server response time (TTFB)](https://full.services/wp-fixer/corrigir-ttfb-alto-wordpress/)
- [Como resolver cache que não limpa no WordPress](https://full.services/wp-fixer/corrigir-cache-nao-limpa-wordpress/)

## Causa

- Revisões de post e rascunhos automáticos acumulados sem limite, multiplicando linhas na tabela wp_posts.
- Transients expirados que nunca foram removidos, inchando a tabela wp_options e o autoload.
- Comentários de spam e na lixeira mantidos por meses nas tabelas wp_comments e wp_commentmeta.
- Metadados órfãos em wp_postmeta e linhas deixadas por plugins que foram desinstalados sem limpeza.
- Colunas muito consultadas (como meta_key) sem índice, forçando o MySQL a varrer a tabela inteira.

## Como resolver

1. Faça backup completo do banco: exporte o banco antes de qualquer limpeza. Operações de exclusão e ALTER TABLE são irreversíveis, e um backup recente é a sua rede de segurança.
2. Limite e limpe as revisões de post: defina um teto de revisões no wp-config.php e apague o histórico antigo. Cada post pode ter dezenas de revisões inúteis ocupando a wp_posts.
3. Apague transients e spam acumulados: remova os transients expirados da wp_options e esvazie os comentários de spam e da lixeira. São os campeões de inchaço em sites antigos.
4. Otimize as tabelas e reduza o autoload: rode OPTIMIZE TABLE para recuperar espaço e desmarque o autoload de options grandes que não precisam carregar em toda requisição.
5. Adicione índices nas colunas mais consultadas: crie índices em colunas como meta_key e meta_value usadas por queries frequentes, para o MySQL localizar as linhas sem varrer a tabela toda.
6. Meça o TTFB de novo: depois da limpeza, rode o PageSpeed e compare o TTFB; em sites dinâmicos a queda costuma ser visível imediatamente no laboratório.

## Código

```sql
-- 1) Apaga revisoes de post (rode com backup feito)
DELETE FROM wp_posts WHERE post_type = 'revision';

-- 2) Remove transients expirados que incham wp_options
DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
   OR option_name LIKE '_site_transient_%';

-- 3) Limpa comentarios de spam e da lixeira
DELETE FROM wp_comments WHERE comment_approved IN ('spam', 'trash');

-- 4) Recupera espaco fisico das tabelas
OPTIMIZE TABLE wp_posts, wp_options, wp_postmeta, wp_comments;

-- 5) Indexa a coluna mais consultada da wp_postmeta
ALTER TABLE wp_postmeta ADD INDEX idx_meta_key (meta_key);
```

## Perguntas frequentes

### Com que frequência devo otimizar o banco do WordPress?

Em sites com muito conteúdo ou WooCommerce, uma limpeza mensal de revisões, transients e spam é suficiente. Tarefas mais pesadas, como OPTIMIZE TABLE e criação de índices, podem ser feitas a cada poucos meses ou quando o TTFB piorar.

### Otimizar o banco melhora o TTFB?

Sim, em páginas dinâmicas. Tabelas menores e indexadas fazem cada query responder mais rápido, o que reduz o tempo de geração da página no servidor e baixa o TTFB. Cache de objeto e de página complementam esse ganho.

### Preciso de plugin para otimizar o banco ou dá para usar SQL?

Os dois funcionam. Plugins de otimização são mais seguros para iniciantes porque limpam por tipo de dado com um clique. Comandos SQL dão mais controle e índices personalizados, mas exigem backup e cuidado para não apagar dados em uso.

### Apagar revisões de post é seguro?

É seguro desde que você tenha backup. As revisões são cópias do histórico de edição; apagá-las não afeta o conteúdo publicado. Para evitar acúmulo futuro, limite o número de revisões no wp-config.php.

### O que é o autoload e por que ele deixa o site lento?

O autoload são as options carregadas em toda requisição do WordPress. Quando plugins gravam valores grandes com autoload ligado, cada página carrega megabytes desnecessários do banco. Desmarcar o autoload desses registros reduz o trabalho a cada carregamento.

### Otimizei o banco mas o site ainda está lento. Por quê?

O banco é só uma das frentes. Se a lentidão persistir, verifique falta de cache de objeto, plugins pesados, TTFB do servidor e queries mal escritas de algum plugin específico, que nenhuma limpeza de tabela resolve sozinha.

**Fonte:** [web.dev — Improve database performance](https://web.dev/articles/optimize-ttfb)
