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 que 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.
Causas principales de problemas de base de datos:
- Bloatware (Datos excesivos): Revisiones de publicaciónes, spam de comentarios, metadata huerfana
- Opciones Autoloaded: Datos cargados en cada recarga de página, incluso si no se usan
- Indices faltantes: Consultas que deben escanear toda la tabla (Full Table Scan)
- Fragmentacion de tablas: Huecos en los datos que aumentan el tamaño del archivo en disco
Parte 1: Higiene de base de datos (limpieza)
Empecemos eliminando la basura. Puedes hacerlo con un plugin (WP-Optimize), pero como desarrollador, debes saber hacerlo “manualmente” usando SQL o WP-CLI.
1. Revisiones de publicaciónes
Cada vez que haces clic en “Guardar borrador”, se crea una nueva copia de la publicación. Con sesiones de edicion 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 = 'revision';
Eliminar revisiones (SQL):
DELETE FROM wp_posts WHERE post_type = 'revision';
Recomendado: Usar WP-CLI (Mas seguro):
wp post delete $(wp post list --post_type='revision' --format=ids) --force
2. Limpieza de spam y papelera
No tiene sentido mantener spam o publicaciónes eliminadas.
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';
3. Transients (datos temporales)
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 --all
4. Metadata huerfana
Cuando eliminas publicaciónes, la metadata asociada a veces permanece en wp_postmeta. Esta metadata huerfana ocupa espacio sin servir a ningun propósito.
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
Parte 2: Opciones Autoloaded (el asesino silencioso del rendimiento)
La tabla wp_options contiene una columna autoload. Si esta establecida en yes, esa opción se carga en cada recarga de página. Los plugins a menudo dejan basura aquí despues de la desinstalacion.
Como diagnosticar?
Verifica cuantos datos (en bytes) se estan 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.
Como encontrar las opciones 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.
Opciones comunes que deben limpiarse
| Plugin/Fuente | Opción | Accion |
|---|---|---|
| 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 |
Parte 3: InnoDB vs MyISAM
En 2026, ya no deberias 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 foraneas: Consistencia de relaciones
Verificar motor de tabla:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nombre_tu_base_datos';
Convertir a InnoDB:
Si encuentras tablas MyISAM, conviertelas:
ALTER TABLE wp_posts ENGINE=InnoDB;
ALTER TABLE wp_comments ENGINE=InnoDB;
ALTER TABLE wp_options ENGINE=InnoDB;
-- y así para todas las tablas
Parte 4: Indexacion (avanzado)
WordPress generalmente tiene buenos indices por defecto, pero los plugins a menudo añaden sus propias tablas sin indices adecuados. La falta de un indice en una consulta WHERE o JOIN significa que MySQL debe escanear cada fila en la tabla.
Ejemplo: Búsqueda lenta en WooCommerce
Si tienes una tienda con 100,000 pedidos y un plugin busca pedidos por meta_key sin indice, la página “Mi Cuenta” puede tardar 10 segundos en cargar.
Solución: Añade indices 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 indices
- Query Monitor: Ordena por tiempo de ejecucion, 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 ejecucion 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 indice.
Parte 5: Prevencion (configurar wp-config.php)
En lugar de limpiar constantemente, es mejor no ensuciar. Configura WordPress de forma inteligente.
Limitar revisiones
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 ); // segundos
Deshabilitar edicion de archivos
Para seguridad e higiene:
define( 'DISALLOW_FILE_EDIT', true );
Parte 6: Herramientas de monitoreo (Query Monitor)
No adivines que ralentiza el sitio. Instala el plugin Query Monitor.
Despues 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.).
Parte 7: Automatizacion del mantenimiento
No dependas de recordar hacer limpieza manual. Automatiza el proceso.
Script de mantenimiento semanal via 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 --tables
Programar con cron del sistema
# 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>&1
Resumen: Checklist de optimización
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
- Indices: Verifica que las consultas pesadas usen indices
- Prevencion: Configura
wp-config.phppara limitar creación de basura - Automatizacion: 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? Contactanos.



