---
title: "10 consultas SQL para limpiar la base de datos de WordPress"
description: "La base de datos de un WordPress que lleva meses o años en producción acumula basura: revisiones de entradas que nadie consultará, comentarios marcados como spam, transients expirados de plugins que y..."
url: https://wpdirecto.com/10-consultas-para-limpiar-la-base-de-datos-de-tu-wordpress/
date: 2012-03-16
modified: 2026-05-07
author: "David Carrero Fernández-Baillo"
image: https://wpdirecto.com/wp-content/uploads/2026/05/limpiar-base-de-datos-wordpress-sql.png
categories: ["Actualidad"]
tags: ["base de datos", "mysql"]
type: post
lang: es
---

# 10 consultas SQL para limpiar la base de datos de WordPress

La base de datos de un WordPress que lleva meses o años en producción acumula basura: revisiones de entradas que nadie consultará, comentarios marcados como spam, transients expirados de plugins que ya no tienes instalados y filas huérfanas que no apuntan a ningún contenido real. Todo eso pesa, ralentiza las consultas y hace los backups más grandes de lo necesario.

Antes de ejecutar cualquier consulta SQL, haz una copia de seguridad completa de la base de datos. Sin excepción. phpMyAdmin tiene la opción de exportar toda la base de datos en un archivo .sql. También puedes usar WP-CLI con `wp db export`. No te saltes este paso.

## 1. Borrar revisiones antiguas (y sus metadatos)

WordPress guarda una revisión por cada vez que guardas un borrador o publicas. En sitios activos esto genera miles de filas en `wp_posts`.

`-- Borrar revisiones
DELETE FROM wp_posts WHERE post_type = 'revision';

-- Borrar metadatos huérfanos de esas revisiones
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;`Lenguaje del código: PHP (php)

Equivalente en WP-CLI: `wp post delete $(wp post list --post_type='revision' --format=ids) --force`

## 2. Eliminar comentarios spam y en la papelera

`-- Spam
DELETE FROM wp_comments WHERE comment_approved = 'spam';

-- Comentarios en la papelera
DELETE FROM wp_comments WHERE comment_approved = 'trash';

-- Limpiar metadatos huérfanos de comentarios
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;`Lenguaje del código: PHP (php)

WP-CLI: `wp comment delete $(wp comment list --status=spam --format=ids) --force`

## 3. Borrar borradores y auto-drafts antiguos

`-- Auto-drafts (guardado automático)
DELETE FROM wp_posts WHERE post_status = 'auto-draft';

-- Borradores con más de 30 días
DELETE FROM wp_posts
WHERE post_status = 'draft'
AND post_modified < DATE_SUB(NOW(), INTERVAL 30 DAY);`Lenguaje del código: JavaScript (javascript)

WP-CLI: `wp post delete $(wp post list --post_status=auto-draft --format=ids) --force`

## 4. Limpiar transients expirados

Los transients son valores temporales que plugins y WordPress guardan en la tabla `wp_options`. Cuando expiran, se borran la próxima vez que se consultan, pero si el plugin que los creó fue desinstalado, pueden quedarse ahí para siempre.

`-- Transients expirados (los que tienen _timeout con valor pasado)
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name LIKE '%_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();

-- Transients sin timeout (persistentes)
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%'
AND option_name NOT IN (
SELECT CONCAT('_transient_', REPLACE(option_name, '_transient_timeout_', ''))
FROM wp_options
WHERE option_name LIKE '%_transient_timeout_%'
);`Lenguaje del código: JavaScript (javascript)

WP-CLI tiene un comando directo: `wp transient delete --expired`. Y para borrar todos: `wp transient delete --all`.

## 5. Eliminar post_meta huérfano

`DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;`Lenguaje del código: PHP (php)

## 6. Limpiar entradas en la papelera

`DELETE FROM wp_posts WHERE post_status = 'trash';`Lenguaje del código: JavaScript (javascript)

WP-CLI: `wp post delete $(wp post list --post_status=trash --format=ids) --force`

## 7. Borrar datos de plugins desinstalados en wp_options

Cuando desinstalar un plugin no hace su limpieza correctamente, deja filas en `wp_options` con su prefijo. Si conoces el prefijo, puedes borrarlas:

`-- Ejemplo: limpiar opciones del plugin WooCommerce si ya no lo usas
DELETE FROM wp_options WHERE option_name LIKE 'woocommerce_%';`Lenguaje del código: JavaScript (javascript)

Ten cuidado con esta: primero verifica qué filas borrarás con un SELECT antes de ejecutar el DELETE.

## 8. Optimizar las tablas después de limpiar

Después de borrar filas, MySQL no libera el espacio en disco automáticamente. La instrucción `OPTIMIZE TABLE` recupera ese espacio y reorganiza el índice:

`OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_options;
OPTIMIZE TABLE wp_comments;
OPTIMIZE TABLE wp_commentmeta;`

WP-CLI: `wp db optimize` optimiza todas las tablas de un golpe.

## Alternativas: plugins para limpiar sin tocar SQL

Si prefieres no ejecutar SQL a mano, hay tres plugins fiables para esto:

- **WP-Optimize**: el más completo. Limpia revisiones, transients, spam, borradores y optimiza tablas desde el panel de WordPress.
- **Advanced DB Cleaner**: más granular. Permite ver exactamente qué hay en wp_options y borrar fila a fila.
- **WP-Sweep**: ligero, gratuito. Muestra cuántas filas limpiará antes de ejecutar la acción.

## Automatizar la limpieza con WP-Cron

Puedes programar una limpieza automática de transients con WP-Cron añadiendo esto al functions.php de tu tema o a un plugin personalizado:

`add_action( 'wp', function() {
if ( ! wp_next_scheduled( 'limpiar_transients_db' ) ) {
wp_schedule_event( time(), 'weekly', 'limpiar_transients_db' );
}
});

add_action( 'limpiar_transients_db', function() {
global $wpdb;
$wpdb->query(
"DELETE FROM $wpdb->options WHERE option_name LIKE '%_transient_%' AND option_name LIKE '%_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()"
);
});`Lenguaje del código: PHP (php)

Una base de datos limpia contribuye directamente a mejorar los tiempos de respuesta. Si también quieres trabajar el rendimiento desde el front, puedes combinar esto con las medidas del artículo sobre [cómo mejorar el rendimiento de WordPress](https://wpdirecto.com/consejos-para-mejorar-el-rendimiento-de-wordpress/) y elegir el [mejor plugin de caché para tu caso](https://wpdirecto.com/encuesta-cual-es-el-mejor-plugin-de-cache-para-wordpress/). También te conviene echar un vistazo a los [plugins para administrar WordPress](https://wpdirecto.com/10-plugins-mejorar-la-administracion-de-wordpress/) de forma más eficiente.

## Preguntas frecuentes

### ¿Con qué frecuencia hay que limpiar la base de datos de WordPress?

Depende del volumen de contenido y del número de plugins activos. Un sitio con publicación frecuente y muchos plugins se beneficia de una limpieza mensual. Sitios más tranquilos pueden funcionar bien con una limpieza trimestral. Lo importante es hacerlo con backup previo siempre.

### ¿Son peligrosas las consultas SQL en WordPress?

Solo si las ejecutas sin backup o sin entender qué hacen. Las consultas de esta guía borran datos que WordPress no usa activamente (spam, revisiones, transients expirados), pero siempre existe el riesgo de que algo vaya mal. Un backup previo es tu única red de seguridad real.

### ¿Qué tabla de WordPress ocupa más espacio generalmente?

`wp_posts` y `wp_postmeta` suelen ser las más grandes en sitios con mucho contenido. `wp_options` crece desproporcionadamente cuando hay muchos plugins instalados o cuando se acumulan transients. Puedes ver el tamaño de cada tabla en phpMyAdmin haciendo clic en el nombre de la base de datos.

### ¿Puedo usar WP-CLI para hacer toda la limpieza sin phpMyAdmin?

Sí. WP-CLI cubre la mayoría de las operaciones: `wp transient delete --expired`, `wp post delete` para revisiones y borradores, `wp comment delete` para spam, y `wp db optimize` para la optimización final. Es el método más limpio si tienes acceso SSH.

### ¿Limpiar la BD mejora el SEO?

De forma indirecta sí. Una BD más ligera reduce los tiempos de respuesta del servidor (TTFB), lo que afecta a las Core Web Vitals y al rastreo eficiente por parte de Googlebot. No es el factor más crítico del SEO técnico, pero forma parte de la higiene general del sitio.
