Limpiar la base de datos de WordPress

sql marzo 11, 2026

Con el tiempo, la base de datos de WordPress acumula revisiones, borradores, transients caducados y metadatos huérfanos que aumentan su tamaño y ralentizan las consultas. Estas queries eliminan ese peso muerto de forma segura.

Casos de uso: optimizar sitios lentos, reducir el tamaño antes de una migración, mantenimiento periódico de la base de datos, limpiar un sitio de desarrollo antes de pasar a producción.

-- Eliminar revisiones de entradas
DELETE FROM wp_posts WHERE post_type = 'revision';

-- Eliminar borradores automáticos
DELETE FROM wp_posts WHERE post_status = 'auto-draft';

-- Eliminar entradas en la papelera
DELETE FROM wp_posts WHERE post_status = 'trash';

-- Eliminar postmeta huérfano (sin post asociado)
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;

-- Eliminar transients caducados
DELETE FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();

DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%';

-- Ver el tamaño de cada tabla en MB
SELECT table_name,
       ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'MB'
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC;
  • wp_posts WHERE post_type = 'revision' — Las revisiones son copias antiguas de cada guardado. En sitios activos se acumulan miles de registros.
  • postmeta huérfano — El LEFT JOIN encuentra registros en wp_postmeta cuyo post_id ya no existe en wp_posts.
  • Transients caducados — WordPress no siempre los elimina automáticamente; la primera query borra los registros de timeout y la segunda los valores asociados.
  • Importante: hacer siempre un backup con wp db export backup.sql antes de ejecutar cualquier DELETE.