WordPress almacena todo en una base de datos MySQL (o MariaDB). Con el tiempo, esta base de datos se "hincha", acumulando datos innecesarios que pueden ralentizar las consultas y todo el sitio. Una base de datos más grande significa tiempos de backup más largos, consultas `SELECT` más lentas y aumento del Time To First Byte (TTFB).
En esta guía completa para desarrolladores, recorreremos la optimización avanzada de base de datos - desde limpieza simple hasta análisis de consultas y configuración de InnoDB.
Por qué la optimización de base de datos es crítica en 2026
En 2026, cuando un TTFB inferior a 100ms es el estándar, una base de datos “pesada” es un ancla para tu sitio. Incluso si tienes un servidor super-rápido (PHP 8.4, NVMe), consultas SQL mal optimizadas pueden matar el rendimiento.
¿Qué hace lenta la base de datos de WordPress?
- Bloatware (Datos excesivos): Revisiónes de publicaciones, spam de comentarios, metadata huérfana
- Opciones Autoloaded: Datos cargados en cada recarga de página, incluso si no se usan
- Índices faltantes: Consultas que deben escanear toda la tabla (Full Table Scan)
- Fragmentación de tablas: Huecos en los datos que aumentan el tamaño del archivo en disco
Cómo limpiar la base de datos de WordPress
Empecemos eliminando la basura. Puedes hacerlo con un plugin (WP-Optimize), pero como desarrollador, debes saber hacerlo “manualmente” usando SQL o WP-CLI.
Cómo eliminar revisiones de entradas
Cada vez que haces clic en “Guardar borrador”, se crea una nueva copia de la publicación. Con sesiones de edición largas, puedes tener cientos de revisiones para un solo artículo.
Consulta SQL para verificar cantidad de revisiones:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revisión';Eliminar revisiones (SQL):
DELETE FROM wp_posts WHERE post_type = 'revisión';Recomendado: Usar WP-CLI (Más seguro):
wp post delete $(wp post list --post_type='revisión' --format=ids) --forceCómo borrar comentarios de spam y de la papelera
No tiene sentido mantener spam o publicaciones eliminadas.
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';Cómo borrar transients caducados
Los transients son cache guardado en la base de datos (wp_options). A veces los transients expirados no se eliminan automáticamente.
Limpieza de transients expirados (SQL):
DELETE FROM wp_options WHERE option_name LIKE ('_transient_timeout%') OR option_name LIKE ('_transient_%');WP-CLI (Mejor método):
wp transient delete --allCómo borrar metadatos huérfanos en wp_postmeta
Cuando eliminas publicaciones, la metadata asociada a veces permanece en wp_postmeta. Esta metadata huérfana ocupa espacio sin servir a ningún propósito.
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;Cómo reducir las opciones autoload en wp_options
La tabla wp_options contiene una columna autoload. Si está establecida en yes, esa opción se carga en cada recarga de página. Los plugins a menudo dejan basura aquí después de la desinstalación.
Cómo medir el tamaño del autoload
Verifica cuantos datos (en bytes) se están autoloading:
SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload = 'yes';Si el resultado supera 800 KB - 1 MB, tienes un problema.
Cómo encontrar las opciones autoload más grandes
SELECT option_name, LENGTH(option_value) as option_size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_size DESC
LIMIT 10;A menudo encontraras datos antiguos de plugins de cache, builders o logs. Si el plugin ya no se usa, puedes eliminar estas opciones de forma segura o cambiar autoload a no.
¿Qué opciones autoload se pueden borrar?
| Plugin/Fuente | Opción | Acción |
|---|---|---|
| Plugins eliminados | *_settings, *_options | Eliminar |
| Cache obsoleto | *_cache_*, *_transient_* | Eliminar |
| Builders (Elementor, Divi) | *_css_*, *_global_* | Cambiar autoload a ‘no’ |
| Analytics/Tracking | *_log_*, *_stats_* | Eliminar si plugin inactivo |
Cómo convertir tablas MyISAM a InnoDB
En 2026, ya no deberías usar el motor MyISAM. InnoDB es el estándar, ofreciendo:
- Bloqueo a nivel de fila: MyISAM bloquea toda la tabla al escribir
- Transacciones ACID: Seguridad de datos
- Claves foráneas: Consistencia de relaciones
Cómo comprobar el motor de cada tabla
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nombre_tu_base_datos';Cómo cambiar el motor con ALTER TABLE
Si encuentras tablas MyISAM, conviértelas:
ALTER TABLE wp_posts ENGINE=InnoDB;
ALTER TABLE wp_comments ENGINE=InnoDB;
ALTER TABLE wp_options ENGINE=InnoDB;
-- y así para todas las tablasCómo crear índices MySQL en WordPress
WordPress generalmente tiene buenos índices por defecto, pero los plugins a menudo añaden sus propias tablas sin índices adecuados. La falta de un índice en una consulta WHERE o JOIN significa que MySQL debe escanear cada fila en la tabla.
¿Por qué es lenta la búsqueda de pedidos en WooCommerce?
Si tienes una tienda con 100,000 pedidos y un plugin busca pedidos por meta_key sin índice, la página “Mi Cuenta” puede tardar 10 segundos en cargar.
Solución: Añade índices a columnas que buscas o ordenas frecuentemente.
CREATE INDEX idx_meta_key_value ON wp_postmeta (meta_key(191), meta_value(50));Como identificar consultas que necesitan índices
- Query Monitor: Ordena por tiempo de ejecución, identifica consultas > 100ms
- EXPLAIN: Ejecuta
EXPLAINantes de cualquier consulta sospechosa - Slow Query Log: Habilita en la configuración MySQL para capturar consultas lentas automáticamente
-- Ver plan de ejecución de una consulta
EXPLAIN SELECT * FROM wp_postmeta WHERE meta_key = '_price' AND meta_value > 100;Si EXPLAIN muestra type: ALL en lugar de type: ref o type: index, la consulta necesita un índice.
Cómo frenar el crecimiento de la base con wp-config.php
En lugar de limpiar constantemente, es mejor no ensuciar. Configura WordPress de forma inteligente.
Cómo limitar revisiones, papelera y autoguardado
Añade a wp-config.php:
// Limitar a las 5 versiones más recientes
define( 'WP_POST_REVISIONS', 5 );
// Vaciar papelera cada 7 dias (por defecto es 30)
define( 'EMPTY_TRASH_DAYS', 7 );
// Aumentar intervalo de autoguardado (menos solicitudes AJAX en editor)
define( 'AUTOSAVE_INTERVAL', 300 ); // segundosDeshabilitar edición de archivos
Para seguridad e higiene:
define( 'DISALLOW_FILE_EDIT', true );Cómo encontrar consultas lentas con Query Monitor
No adivines que ralentiza el sitio. Instala el plugin Query Monitor.
Después de la instalación, en la barra de admin veras el tiempo de generación de página y número de consultas SQL.
- Haz clic en las estadísticas de la barra
- Ve a la pestaña “Queries”
- Ordena por “Time”
Si ves una consulta que toma 0.5s o más - ese es tu objetivo de optimización. A menudo viene de un plugin mal escrito (“Productos Vistos Recientemente”, “Contador de Visitas”, etc.).
Cómo automatizar el mantenimiento de la base de datos con WP-CLI
No dependas de recordar hacer limpieza manual. Automatiza el proceso.
Script de limpieza semanal con WP-CLI
#!/bin/bash
# Mantenimiento semanal de base de datos WordPress
# 1. Eliminar transients expirados
wp transient delete --expired
# 2. Eliminar spam y papelera de comentarios
wp comment delete $(wp comment list --status=spam --format=ids) --force 2>/dev/null
wp comment delete $(wp comment list --status=trash --format=ids) --force 2>/dev/null
# 3. Optimizar tablas
wp db optimize
# 4. Reportar tamaño de base de datos
wp db size --tablesCómo programar el script con cron
# Añadir a crontab: ejecutar cada domingo a las 3am
0 3 * * 0 /usr/local/bin/wp-db-maintenance.sh >> /var/log/wp-maintenance.log 2>&1Lista de comprobación para optimizar la base de datos de WordPress
Descubre más sobre optimización de velocidad WordPress en WPPoland.
- Backup: Siempre haz backup antes de trabajar en la base de datos
- Motor: Asegura que todas las tablas sean InnoDB
- Autoload: Verifica tamaño de opciones autoloaded (objetivo < 800KB)
- Limpieza: Elimina revisiones, spam y transients expirados
- Índices: Verifica que las consultas pesadas usen índices
- Prevención: Configura
wp-config.phppara limitar creación de basura - Automatización: Programa mantenimiento semanal con WP-CLI y cron
- Monitoreo: Usa Query Monitor para identificar consultas lentas continuamente
Cuando tu base de datos es ligera y rápida, PHP usa menos memoria y los usuarios obtienen contenido al instante. Esta es la base del WordPress moderno.
Necesitas ayuda con optimización de velocidad WordPress o mantenimiento WordPress profesional? Contactaños.







