Cómo optimizar una base de datos MySQL para que WordPress vaya más rápido
¿Por qué WordPress va lento si la web es "ligera"?
Es la pregunta del millón. Muchas veces revisamos el hosting, cambiamos el tema, optimizamos las imágenes… y aún así la web va como un caracol. El culpable silencioso suele estar en la base de datos. WordPress guarda todo en MySQL: entradas, comentarios, opciones, sesiones, transients… Con el tiempo, esa base de datos se llena de basura, consultas ineficientes y tablas fragmentadas. El resultado: una base datos lenta wordpress que hace que cada página tarde segundos en cargar.
La buena noticia es que optimizar mysql wordpress no requiere ser un programador experto. Con unas pocas herramientas y ajustes, puedes hacer que tu web vuele. En esta guía te explico paso a paso, con un lenguaje claro y directo, cómo lograrlo.
Paso 1: Diagnóstico inicial. ¿Tu base de datos es realmente el problema?
Antes de tocar nada, necesitas saber si el cuello de botella está en MySQL o en otra parte. Puedes hacer una prueba rápida:
- Instala un plugin como Query Monitor (es gratis). Te muestra el tiempo de cada consulta SQL en la parte inferior de tu web.
- Si ves que hay consultas que tardan más de 0.5 segundos, tienes un problema claro de optimización.
Otra señal típica es que el panel de administración (wp-admin) vaya lento, aunque el front-end (la parte pública) parezca aceptable. Eso suele indicar que las consultas de opciones o transients están saturadas.
[WARNING] No hagas cambios en la base de datos sin hacer una copia de seguridad antes. Un error en una consulta DELETE o ALTER puede dejar tu web caída. Siempre exporta un backup desde Syspanel (acceso por el puerto 2106) o desde phpMyAdmin.
Paso 2: Limpiar transients (la basura más común)
Uno de los mayores causantes de una base datos lenta wordpress son los transients. Son datos temporales que WordPress y los plugins guardan con una fecha de caducidad. El problema es que muchos plugins no los borran cuando toca, y se acumulan miles de filas en la tabla wp_options.
¿Cómo limpiarlos?
Tienes dos vías: con plugin o con SQL directo.
Opción A: Con plugin
- Instala "Transients Manager" o "WP-Optimize".
- Ve a la sección de transients y elimina los "caducados" o "expirados". No borres los activos, porque podrías romper alguna función temporal.
Opción B: Con SQL (más rápida y sin plugin)
Entra a phpMyAdmin (desde tu panel de hosting o Syspanel), selecciona tu base de datos y ejecuta:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%' AND option_name NOT LIKE '_transient_delete_%';
Eso limpia los transients que ya han expirado. Si quieres una limpieza más agresiva (solo para valientes):
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%';
[TIP] Haz esta limpieza una vez al mes. Puedes programarla con un cron de WordPress o simplemente recordarlo en tu calendario.
Paso 3: Optimizar las tablas de MySQL (fragmentación)
Cuando WordPress inserta, actualiza y borra registros, las tablas se fragmentan. Esto hace que las consultas sean más lentas porque MySQL tiene que leer bloques dispersos. La solución es ejecutar OPTIMIZE TABLE.
¿Cómo se hace?
Desde phpMyAdmin:
- Selecciona todas las tablas de tu base de datos (normalmente empiezan por
wp_). - En el menú desplegable, elige "Optimizar tablas".
- Espera a que termine. Puede tardar unos segundos.
Desde SQL directo:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments;
Puedes añadir todas las tablas que quieras. Si no sabes cuáles son, ejecuta esto para listarlas:
SHOW TABLES;
[INFO] No pasa nada si la tabla está en uso mientras la optimizas, MySQL lo gestiona. Pero si tu web tiene mucho tráfico, hazlo en horas bajas.
Paso 4: Añadir índices a las tablas más usadas
Los índices son como el índice de un libro: hacen que MySQL encuentre los datos mucho más rápido. Sin ellos, cada consulta tiene que recorrer toda la tabla (full scan). Esto es especialmente crítico en las tablas wp_postmeta y wp_options, que suelen crecer muchísimo.
¿Qué índices añadir?
Una de las consultas más comunes en WordPress es buscar metadatos por post. Puedes añadir un índice compuesto:
ALTER TABLE wp_postmeta ADD INDEX meta_key_post_id (meta_key, post_id);
Si tu tabla wp_options es enorme (más de 100.000 filas), añade un índice sobre option_name:
ALTER TABLE wp_options ADD INDEX option_name_index (option_name);
[WARNING] No añadas índices a todas las columnas. Eso ralentiza las inserciones y actualizaciones. Solo a las que se usan en consultas frecuentes (WHERE, JOIN, ORDER BY).
¿Cómo saber qué índices faltan?
Puedes activar el registro de consultas lentas en MySQL (slow query log). Pero para un usuario básico, lo más práctico es usar un plugin como "Index WP MySQL For Speed". Analiza tu base de datos y te sugiere los índices exactos que necesitas. Luego puedes aplicarlos desde el propio plugin o copiando el SQL que te da.
Paso 5: Optimizar consultas mysql (el corazón del problema)
Aunque la base de datos esté limpia, si los plugins y el tema hacen consultas ineficientes, seguirá yendo lenta. No puedes reescribir el código de cada plugin, pero sí puedes mitigarlo.
5.1. Evita consultas innecesarias en el front-end
Muchos temas cargan consultas de widgets, menús o entradas relacionadas en cada página, aunque no las uses. Revisa la configuración de tu tema y desactiva lo que no necesites. Por ejemplo, si no usas "entradas relacionadas", desactívalo.
5.2. Usa caché de consultas
WordPress no cachea las consultas por defecto. Puedes usar un plugin de caché como W3 Total Cache o WP Super Cache, que guardan el HTML generado. Así, aunque haya consultas lentas, solo se ejecutan una vez y el resto de visitantes reciben la versión cacheada.
5.3. Configura el motor de almacenamiento InnoDB
Si tu hosting usa MyISAM (anticuado), cámbialo a InnoDB. Es más eficiente para lecturas y escrituras concurrentes. Puedes hacerlo con:
ALTER TABLE wp_posts ENGINE=InnoDB;
Repite para todas las tablas. Pero cuidado: si tienes muchos datos, puede tardar. Hazlo con calma.
[TIP] Si tu hosting usa Syspanel (puerto 2106), puedes gestionar todo esto desde phpMyAdmin integrado, sin necesidad de acceso SSH.
Paso 6: Eliminar datos obsoletos (revisiones, spam y borradores)
WordPress guarda cada revisión de tus entradas. Si editas un post 20 veces, tienes 20 filas en wp_posts y otras tantas en wp_postmeta. Eso infla la base de datos innecesariamente.
Limpiar revisiones antiguas
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_date < NOW() - INTERVAL 30 DAY;
Eso borra las revisiones de más de 30 días. Ajusta el intervalo a tu gusto.
Limpiar comentarios spam
DELETE FROM wp_comments WHERE comment_approved = 'spam';
Limpiar borradores
DELETE FROM wp_posts WHERE post_status = 'draft' AND post_modified < NOW() - INTERVAL 60 DAY;
[INFO] Si no te atreves con SQL, plugins como "WP-Optimize" o "Advanced Database Cleaner" hacen esto con un clic. Pero el SQL es más rápido y no deja residuos.
Paso 7: Configurar MariaDB o MySQL para mayor rendimiento
A veces el problema no es la base de datos en sí, sino la configuración del servidor. Si tienes acceso a tu hosting (VPS o dedicado), puedes ajustar los parámetros de MySQL.
Los más importantes:
- innodb_buffer_pool_size: debería ser el 70% de tu memoria RAM disponible. Si tienes 4GB, pon 2.8G.
- query_cache_type: en MySQL 5.7 o anteriores, puedes activarlo. En MySQL 8 ya está obsoleto.
- max_connections: si tu web recibe mucho tráfico, súbelo a 200 o 300.
En Syspanel (acceso por puerto 2106), puedes editar el archivo my.cnf desde el administrador de archivos o por SSH. Si no sabes qué valores poner, usa herramientas como mysqltuner.pl que te dan recomendaciones automáticas.
[WARNING] Cambiar la configuración de MySQL puede hacer que no arranque si pones valores absurdos. Guarda una copia del archivo original antes de editarlo.
Paso 8: Usar un plugin de caché de base de datos
Además de la caché de página, existen plugins específicos para acelerar wordpress db. Uno de los más recomendados es "Redis Object Cache". Almacena en memoria (RAM) los resultados de las consultas repetidas, evitando que MySQL trabaje de más.
Instalación rápida:
- Instala y activa el plugin.
- Necesitas que tu hosting tenga Redis instalado. En Syspanel puedes activarlo desde la sección de servicios.
- Una vez activo, el plugin se conecta automáticamente y empieza a cachear.
Si tu hosting no tiene Redis, otra opción es "Memcached". Pero Redis es más sencillo de configurar.
Paso 9: Monitoreo continuo y mantenimiento preventivo
Optimizar no es una tarea de una vez. Debes crear una rutina. Te sugiero:
- Semanalmente: limpiar transients y revisiones.
- Mensualmente: optimizar tablas y revisar índices.
- Trimestralmente: revisar el slow query log y ajustar la configuración de MySQL.
Puedes automatizar parte de esto con un script cron. Por ejemplo, en tu hosting puedes crear un cron que ejecute:
mysqlcheck -o --all-databases
Eso optimiza todas las bases de datos del servidor.
Preguntas frecuentes (FAQ)
¿Cuánto tiempo tarda en notarse la mejora?
Depende del estado inicial. Si tenías miles de transients y tablas fragmentadas, notarás la diferencia inmediatamente después de limpiar y optimizar. En general, la mejora es visible en el tiempo de carga de las páginas.
¿Puedo romper mi web si ejecuto SQL mal?
Sí, pero si sigues los comandos de esta guía y haces backup antes, el riesgo es mínimo. Empieza con los comandos de limpieza (DELETE) y luego pasa a los de estructura (ALTER). Si algo falla, restaura el backup.
¿Es mejor usar plugins o SQL directo?
Para un usuario básico, los plugins son más seguros porque te guían. Pero el SQL es más rápido y no añade peso extra. Mi recomendación: usa plugins para el mantenimiento recurrente y SQL para limpiezas puntuales.
¿Y si mi hosting no da acceso a phpMyAdmin?
La mayoría lo da, incluso Syspanel (puerto 2106) lo incluye. Si no, puedes usar la consola de WP-CLI si tienes acceso SSH. Ejemplo:
wp db optimize
¿Los índices afectan al rendimiento de escritura?
Sí, pero es un coste menor comparado con la mejora en lectura. Si tu web es de solo lectura (blog, portfolio), merece la pena. Si es una tienda con muchas actualizaciones, equilibra los índices.
Conclusión
Optimizar mysql wordpress no es un lujo, es una necesidad si quieres que tu web cargue rápido y ofrezca una buena experiencia de usuario. La combinación de limpiar transients, optimizar tablas, añadir índices y configurar bien el servidor puede reducir el tiempo de carga en más del 50%.
Empieza por lo más fácil: limpia los transients y optimiza las tablas. Luego, si sigues notando lentitud, pasa a los índices y a la configuración avanzada. Y recuerda: la constancia es clave. Una base de datos cuidada es una web rápida.
Si tienes dudas, deja un comentario o consulta a tu proveedor de hosting. ¡Tu web te lo agradecerá!
