{"id":3658,"date":"2026-06-26T11:43:16","date_gmt":"2026-06-26T09:43:16","guid":{"rendered":"https:\/\/mantenimientoweb.pro\/blog\/como-optimizar-la-base-de-datos-de-wordpress-para-reducir-el-tiempo-de-carga\/"},"modified":"2026-06-26T11:43:18","modified_gmt":"2026-06-26T09:43:18","slug":"como-optimizar-la-base-de-datos-de-wordpress-para-reducir-el-tiempo-de-carga","status":"publish","type":"post","link":"https:\/\/mantenimientoweb.pro\/blog\/como-optimizar-la-base-de-datos-de-wordpress-para-reducir-el-tiempo-de-carga\/","title":{"rendered":"\u00bfC\u00f3mo optimizar la base de datos de WordPress para reducir el tiempo de carga?"},"content":{"rendered":"<article>\n<p>    <span>WordPress \u00b7 Rendimiento \u00b7 Base de datos \u2699\ufe0f<\/span><br \/>\n    \u00bfC\u00f3mo optimizar la base de datos de WordPress para reducir el tiempo de carga?<\/p>\n<p>Un sitio WordPress puede tener un dise\u00f1o impecable, im\u00e1genes comprimidas, CDN reluciente y un tema \u201cligero\u201d \u2014esa palabra tan repetida que a veces parece promesa electoral\u2014, pero seguir cargando con la lentitud de un tren antiguo subiendo una monta\u00f1a. Muchas veces el culpable no est\u00e1 en lo visible. Est\u00e1 debajo: en la base de datos.<\/p>\n<p>La base de datos de WordPress es la memoria del sitio: guarda entradas, p\u00e1ginas, usuarios, comentarios, ajustes, metadatos, pedidos de WooCommerce, sesiones, transients, registros de plugins y una alegre colecci\u00f3n de restos que nadie invit\u00f3 pero que se quedaron a vivir. Optimizarla no es un lujo t\u00e9cnico; es una forma de higiene digital. Como barrer una biblioteca despu\u00e9s de a\u00f1os de prestar libros sin anotar qui\u00e9n los devolvi\u00f3.<\/p>\n<p>En esta gu\u00eda vamos a ver c\u00f3mo limpiar, analizar y optimizar la base de datos de WordPress de forma profesional, sin trucos m\u00e1gicos ni plugins milagrosos de esos que prometen \u201cacelerar un 300%\u201d con el aplomo de un vendedor de crecepelo. Hablaremos de MySQL y MariaDB, de <code>wp_options<\/code>, revisiones, transients, tablas InnoDB, WP-CLI, WooCommerce, seguridad, copias de respaldo y mantenimiento peri\u00f3dico. Porque el rendimiento web no nace de una sola acci\u00f3n heroica, sino de muchas decisiones peque\u00f1as y sensatas.<\/p>\n<nav aria-label=\"Tabla de contenidos\">\n<h2>Contenido de la gu\u00eda<\/h2>\n<ul>\n<li><a href=\"#por-que-importa\">Por qu\u00e9 la base de datos afecta al tiempo de carga<\/a><\/li>\n<li><a href=\"#antes-de-tocar\">Qu\u00e9 hacer antes de optimizar<\/a><\/li>\n<li><a href=\"#diagnostico\">C\u00f3mo diagnosticar una base de datos lenta<\/a><\/li>\n<li><a href=\"#limpieza\">Qu\u00e9 limpiar en WordPress<\/a><\/li>\n<li><a href=\"#wp-options\">El caso especial de wp_options<\/a><\/li>\n<li><a href=\"#transients\">Transients y datos temporales<\/a><\/li>\n<li><a href=\"#woocommerce\">WooCommerce: cuando la tienda pesa<\/a><\/li>\n<li><a href=\"#optimizar-tablas\">Optimizar tablas MySQL\/MariaDB<\/a><\/li>\n<li><a href=\"#wp-cli\">Automatizaci\u00f3n con WP-CLI<\/a><\/li>\n<li><a href=\"#hosting\">Servidor, cach\u00e9 y configuraci\u00f3n<\/a><\/li>\n<li><a href=\"#mantenimiento\">Plan de mantenimiento recomendado<\/a><\/li>\n<\/ul>\n<\/nav>\n<h2 id=\"por-que-importa\">Por qu\u00e9 la base de datos influye tanto en la velocidad de WordPress \ud83d\ude80<\/h2>\n<p>Cada vez que alguien visita una p\u00e1gina de WordPress, el sistema no sirve simplemente un archivo HTML quieto como una postal. WordPress construye la p\u00e1gina. Consulta opciones, obtiene el contenido, revisa permisos, carga men\u00fas, widgets, metadatos, configuraciones del tema y datos de plugins. Es una peque\u00f1a \u00f3pera administrativa ejecut\u00e1ndose en milisegundos.<\/p>\n<p>Cuando la base de datos est\u00e1 limpia, indexada razonablemente y bien servida por el hosting, esa \u00f3pera suena afinada. Cuando est\u00e1 inflada, llena de datos obsoletos o sometida a consultas torpes, cada visita se vuelve una procesi\u00f3n: PHP espera, MySQL responde tarde, el navegador bosteza y el usuario se va. As\u00ed de elegante y as\u00ed de cruel.<\/p>\n<p>En t\u00e9rminos pr\u00e1cticos, una base de datos desordenada puede afectar a:<\/p>\n<ul>\n<li><strong>TTFB<\/strong> o <em>Time to First Byte<\/em>: el tiempo que tarda el servidor en empezar a responder.<\/li>\n<li><strong>Tiempo de generaci\u00f3n de p\u00e1gina<\/strong>: especialmente en p\u00e1ginas din\u00e1micas sin cach\u00e9.<\/li>\n<li><strong>Panel de administraci\u00f3n<\/strong>: entradas, pedidos, productos y usuarios pueden volverse lentos.<\/li>\n<li><strong>Consultas internas<\/strong>: algunos plugins ejecutan consultas pesadas en cada carga.<\/li>\n<li><strong>Consumo de CPU y memoria<\/strong>: una consulta mala puede comerse recursos como una langosta en campo verde.<\/li>\n<\/ul>\n<p>Hay una paradoja curiosa: WordPress es sencillo para publicar, pero complejo para mantener. Esa es su grandeza y su fragilidad. Permite levantar un sitio en una tarde, pero si pasan tres a\u00f1os sin mantenimiento, la base de datos empieza a parecerse a un desv\u00e1n familiar: hay cosas valiosas, s\u00ed, pero tambi\u00e9n cables, facturas viejas, cajas sin etiqueta y una tostadora que nadie recuerda haber comprado.<\/p>\n<h2 id=\"antes-de-tocar\">Antes de tocar nada: copia de seguridad, entorno de pruebas y sentido com\u00fan \ud83d\udee1\ufe0f<\/h2>\n<p>La optimizaci\u00f3n de bases de datos tiene una regla sagrada: <strong>no se limpia lo que no se puede restaurar<\/strong>. Antes de borrar revisiones, eliminar transients o ejecutar consultas SQL, conviene hacer una copia completa de archivos y base de datos. Completa significa completa. No \u201ccreo que el hosting hace backups\u201d. No \u201cel plugin dice que s\u00ed\u201d. Verificable.<\/p>\n<p>      <strong>Advertencia profesional:<\/strong> nunca ejecutes operaciones de limpieza masiva en producci\u00f3n sin una copia de seguridad reciente y restaurable. En sitios con WooCommerce, membres\u00edas, reservas o LMS, un error no borra solo datos: borra dinero, historial y confianza.<\/p>\n<p>Lo ideal es trabajar as\u00ed:<\/p>\n<ol>\n<li><strong>Haz un backup completo<\/strong> desde el hosting, un plugin fiable o l\u00ednea de comandos.<\/li>\n<li><strong>Descarga una copia local<\/strong> o gu\u00e1rdala fuera del servidor principal.<\/li>\n<li><strong>Prueba la restauraci\u00f3n<\/strong> en staging si el sitio es cr\u00edtico.<\/li>\n<li><strong>Desactiva limpiezas autom\u00e1ticas agresivas<\/strong> durante campa\u00f1as, lanzamientos o picos de venta.<\/li>\n<li><strong>Documenta lo que haces<\/strong>: fecha, herramienta usada, tablas afectadas y resultados.<\/li>\n<\/ol>\n<p>Una an\u00e9cdota m\u00ednima, casi dom\u00e9stica: una vez perd\u00ed veinte minutos buscando mis llaves mientras las ten\u00eda en la mano. Me re\u00ed, claro, con esa risa breve de quien se descubre humano. En bases de datos ocurre algo parecido: el error no suele venir de lo desconocido, sino de lo obvio ignorado. El backup que \u201cya estaba\u201d. La tabla que \u201cseguro no se usa\u201d. El plugin que \u201csolo limpia basura\u201d. Y entonces, zas.<\/p>\n<h2 id=\"diagnostico\">Diagn\u00f3stico: c\u00f3mo saber si tu base de datos est\u00e1 frenando WordPress \ud83d\udd0d<\/h2>\n<p>Optimizar sin medir es como podar un \u00e1rbol con los ojos cerrados: quiz\u00e1 quede mejor, quiz\u00e1 lo dejes sin ramas. Antes de limpiar, conviene identificar d\u00f3nde est\u00e1 el problema. No todos los sitios lentos tienen una base de datos enferma; a veces el cuello de botella est\u00e1 en PHP, en una API externa, en el hosting, en im\u00e1genes enormes o en JavaScript desbocado.<\/p>\n<h3>Herramientas \u00fatiles para investigar<\/h3>\n<table>\n<thead>\n<tr>\n<th>Herramienta<\/th>\n<th>Qu\u00e9 permite ver<\/th>\n<th>Cu\u00e1ndo usarla<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Query Monitor<\/strong><\/td>\n<td>Consultas SQL, tiempos, hooks, errores PHP, peticiones HTTP externas.<\/td>\n<td>Para detectar plugins o plantillas que generan consultas lentas.<\/td>\n<\/tr>\n<tr>\n<td><strong>New Relic \/ Blackfire<\/strong><\/td>\n<td>Perfilado avanzado de PHP, base de datos, transacciones y cuellos de botella.<\/td>\n<td>En sitios profesionales, WooCommerce o proyectos con tr\u00e1fico alto.<\/td>\n<\/tr>\n<tr>\n<td><strong>phpMyAdmin \/ Adminer<\/strong><\/td>\n<td>Tama\u00f1o de tablas, overhead, estructura, \u00edndices y consultas manuales.<\/td>\n<td>Para inspecci\u00f3n directa, con cuidado quir\u00fargico.<\/td>\n<\/tr>\n<tr>\n<td><strong>WP-CLI<\/strong><\/td>\n<td>Operaciones r\u00e1pidas de mantenimiento, exportaci\u00f3n, b\u00fasqueda y limpieza.<\/td>\n<td>Para desarrolladores y administradores con acceso SSH.<\/td>\n<\/tr>\n<tr>\n<td><strong>Slow Query Log de MySQL\/MariaDB<\/strong><\/td>\n<td>Consultas que tardan m\u00e1s de cierto umbral.<\/td>\n<td>Cuando sospechas de consultas pesadas recurrentes.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Indicadores de alerta<\/h3>\n<ul>\n<li>El administrador de WordPress tarda varios segundos en cargar.<\/li>\n<li>La tabla <code>wp_options<\/code> tiene autoload excesivo.<\/li>\n<li>Las tablas <code>wp_postmeta<\/code>, <code>wp_options<\/code> o <code>wp_actionscheduler_actions<\/code> crecen sin control.<\/li>\n<li>Hay miles o millones de transients caducados.<\/li>\n<li>El TTFB es alto incluso con im\u00e1genes optimizadas.<\/li>\n<li>WooCommerce tarda demasiado en listar pedidos o procesar el checkout.<\/li>\n<li>Query Monitor muestra consultas repetidas o lentas asociadas a un plugin concreto.<\/li>\n<\/ul>\n<p>Una consulta sencilla para ver el tama\u00f1o de las tablas puede orientar bastante:<\/p>\n<pre><code>SELECT \n  table_name AS tabla,\n  ROUND((data_length + index_length) \/ 1024 \/ 1024, 2) AS tama\u00f1o_mb,\n  ROUND(data_free \/ 1024 \/ 1024, 2) AS espacio_libre_mb\nFROM information_schema.tables\nWHERE table_schema = DATABASE()\nORDER BY (data_length + index_length) DESC;<\/code><\/pre>\n<p>No basta con mirar el tama\u00f1o total. Una tabla grande no es necesariamente un problema. Una tienda online con a\u00f1os de pedidos tendr\u00e1 tablas voluminosas, y eso es normal. El problema aparece cuando el crecimiento no corresponde a datos \u00fatiles: logs antiguos, sesiones abandonadas, metadatos hu\u00e9rfanos, acciones programadas completadas hace meses. La diferencia entre archivo hist\u00f3rico y basura digital es, a veces, una pol\u00edtica de retenci\u00f3n.<\/p>\n<h2 id=\"limpieza\">Qu\u00e9 puedes limpiar en la base de datos de WordPress \ud83e\uddf9<\/h2>\n<p>WordPress acumula datos por dise\u00f1o. Eso no es un defecto; es parte de su flexibilidad. Pero la flexibilidad sin mantenimiento se vuelve barro. Veamos los residuos m\u00e1s comunes y c\u00f3mo tratarlos.<\/p>\n<h3>1. Revisiones de entradas y p\u00e1ginas<\/h3>\n<p>Las revisiones son \u00fatiles: permiten recuperar versiones anteriores de una entrada. El problema surge cuando un sitio con cientos o miles de contenidos conserva decenas de revisiones por art\u00edculo. Cada revisi\u00f3n se almacena como un registro en <code>wp_posts<\/code>, con posibles metadatos asociados. Una memoria prodigiosa, s\u00ed, aunque a veces recuerde hasta el bostezo.<\/p>\n<p>Para contar revisiones:<\/p>\n<pre><code>SELECT COUNT(*) AS total_revisiones\nFROM wp_posts\nWHERE post_type = 'revision';<\/code><\/pre>\n<p>Para eliminarlas manualmente, con copia previa:<\/p>\n<pre><code>DELETE FROM wp_posts\nWHERE post_type = 'revision';<\/code><\/pre>\n<p>Tambi\u00e9n puedes limitar revisiones desde <code>wp-config.php<\/code>:<\/p>\n<pre><code>define('WP_POST_REVISIONS', 5);<\/code><\/pre>\n<p>O desactivarlas, aunque no suele ser recomendable en equipos editoriales:<\/p>\n<pre><code>define('WP_POST_REVISIONS', false);<\/code><\/pre>\n<p>La opci\u00f3n m\u00e1s equilibrada suele ser conservar entre 3 y 10 revisiones. Ni amnesia total ni museo de cada coma cambiada.<\/p>\n<h3>2. Borradores autom\u00e1ticos y entradas en papelera<\/h3>\n<p>WordPress crea autosaves para evitar p\u00e9rdidas durante la edici\u00f3n. Bendita precauci\u00f3n. Pero con el tiempo pueden acumularse borradores autom\u00e1ticos, entradas en papelera y contenido descartado.<\/p>\n<pre><code>SELECT post_status, COUNT(*) AS total\nFROM wp_posts\nGROUP BY post_status\nORDER BY total DESC;<\/code><\/pre>\n<p>Para vaciar la papelera de entradas y p\u00e1ginas desde WP-CLI:<\/p>\n<pre><code>wp post delete $(wp post list --post_status=trash --format=ids) --force<\/code><\/pre>\n<p>Tambi\u00e9n puedes ajustar el tiempo que WordPress conserva elementos en la papelera:<\/p>\n<pre><code>define('EMPTY_TRASH_DAYS', 15);<\/code><\/pre>\n<h3>3. Comentarios spam y comentarios eliminados<\/h3>\n<p>Si tu sitio tiene comentarios abiertos, el spam llega como lluvia fina: no parece grave al principio, pero termina empap\u00e1ndolo todo. Akismet, Antispam Bee o soluciones similares ayudan, pero conviene limpiar de vez en cuando.<\/p>\n<pre><code>SELECT comment_approved, COUNT(*) AS total\nFROM wp_comments\nGROUP BY comment_approved;<\/code><\/pre>\n<p>Estados habituales: <code>spam<\/code>, <code>trash<\/code>, <code>0<\/code> para pendientes y <code>1<\/code> para aprobados.<\/p>\n<pre><code>DELETE FROM wp_comments\nWHERE comment_approved = 'spam';\n\nDELETE FROM wp_comments\nWHERE comment_approved = 'trash';<\/code><\/pre>\n<p>Despu\u00e9s, revisa metadatos hu\u00e9rfanos de comentarios:<\/p>\n<pre><code>DELETE cm\nFROM wp_commentmeta cm\nLEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id\nWHERE c.comment_ID IS NULL;<\/code><\/pre>\n<h3>4. Metadatos hu\u00e9rfanos<\/h3>\n<p>Los metadatos son peque\u00f1as notas asociadas a posts, usuarios, comentarios o t\u00e9rminos. Plugins y temas los usan constantemente. Cuando el objeto principal desaparece pero el metadato queda, nace el hu\u00e9rfano: un dato sin casa, como una etiqueta pegada a una maleta que ya no existe.<\/p>\n<p>Metadatos hu\u00e9rfanos de posts:<\/p>\n<pre><code>DELETE pm\nFROM wp_postmeta pm\nLEFT JOIN wp_posts p ON p.ID = pm.post_id\nWHERE p.ID IS NULL;<\/code><\/pre>\n<p>Metadatos hu\u00e9rfanos de usuarios:<\/p>\n<pre><code>DELETE um\nFROM wp_usermeta um\nLEFT JOIN wp_users u ON u.ID = um.user_id\nWHERE u.ID IS NULL;<\/code><\/pre>\n<p>Metadatos hu\u00e9rfanos de t\u00e9rminos:<\/p>\n<pre><code>DELETE tm\nFROM wp_termmeta tm\nLEFT JOIN wp_terms t ON t.term_id = tm.term_id\nWHERE t.term_id IS NULL;<\/code><\/pre>\n<p>      <strong>Importante:<\/strong> si tu instalaci\u00f3n no usa el prefijo <code>wp_<\/code>, cambia los nombres de las tablas por el prefijo real. Muchos sitios usan prefijos personalizados por seguridad o por instalaciones m\u00faltiples.<\/p>\n<h2 id=\"wp-options\">La tabla wp_options: peque\u00f1a puerta, enorme tr\u00e1fico \ud83d\udeaa<\/h2>\n<p>Si hubiera que elegir una tabla capaz de convertir un WordPress elegante en un elefante con patines, ser\u00eda <code>wp_options<\/code>. All\u00ed viven ajustes del sitio, configuraciones de plugins, transients, cach\u00e9s internas y opciones que se cargan autom\u00e1ticamente en muchas peticiones.<\/p>\n<p>La clave est\u00e1 en el campo <code>autoload<\/code>. Las opciones marcadas para autocarga se cargan de forma temprana porque WordPress asume que ser\u00e1n necesarias. Esto es razonable para el nombre del sitio, la URL o ajustes esenciales. No lo es tanto para guardar un registro de 4 MB de un plugin que alguien desinstal\u00f3 en 2021, pero la historia de la inform\u00e1tica tambi\u00e9n es la historia de cosas que nadie limpi\u00f3 porque \u201cno molestaban\u201d. Hasta que molestan.<\/p>\n<h3>C\u00f3mo medir el peso de opciones autoload<\/h3>\n<pre><code>SELECT \n  ROUND(SUM(LENGTH(option_value)) \/ 1024 \/ 1024, 2) AS autoload_mb\nFROM wp_options\nWHERE autoload IN ('yes', 'on', 'auto-on');<\/code><\/pre>\n<p>No existe una cifra universal, porque depende del hosting, memoria, cach\u00e9 de objetos y tr\u00e1fico. Aun as\u00ed, como referencia pr\u00e1ctica: si el total de opciones autocargadas supera varios megabytes, merece una revisi\u00f3n. En sitios bien mantenidos, deber\u00eda ser modesto. En sitios antiguos con muchos plugins, puede crecer hasta cifras absurdas con la calma burocr\u00e1tica de una carpeta olvidada.<\/p>\n<h3>Ver las opciones autoload m\u00e1s pesadas<\/h3>\n<pre><code>SELECT \n  option_name,\n  autoload,\n  ROUND(LENGTH(option_value) \/ 1024, 2) AS tama\u00f1o_kb\nFROM wp_options\nWHERE autoload IN ('yes', 'on', 'auto-on')\nORDER BY LENGTH(option_value) DESC\nLIMIT 30;<\/code><\/pre>\n<p>\u00bfQu\u00e9 hacer con lo que aparezca? No borres a ciegas. Identifica primero:<\/p>\n<ul>\n<li>Si pertenece a un plugin activo.<\/li>\n<li>Si es un transient o cach\u00e9 temporal.<\/li>\n<li>Si corresponde a un plugin desinstalado.<\/li>\n<li>Si puede cambiarse a <code>autoload = 'no'<\/code> sin romper funcionalidad.<\/li>\n<li>Si el plugin ofrece una herramienta interna de limpieza.<\/li>\n<\/ul>\n<p>En algunos casos, cambiar una opci\u00f3n pesada a no autocargada puede mejorar el rendimiento:<\/p>\n<pre><code>UPDATE wp_options\nSET autoload = 'no'\nWHERE option_name = 'nombre_de_la_opcion';<\/code><\/pre>\n<p>      <strong>Cuidado:<\/strong> no cambies opciones cr\u00edticas como <code>siteurl<\/code>, <code>home<\/code>, <code>active_plugins<\/code>, <code>template<\/code>, <code>stylesheet<\/code> o configuraciones esenciales del n\u00facleo. Una opci\u00f3n mal tocada puede dejar el sitio inaccesible.<\/p>\n<h2 id=\"transients\">Transients: lo temporal que a veces se queda para siempre \u23f3<\/h2>\n<p>Los transients son datos temporales que WordPress y los plugins almacenan para evitar recalcular informaci\u00f3n. Bien usados, son aliados del rendimiento. Mal gestionados, se convierten en hu\u00e9spedes eternos con maleta peque\u00f1a y presencia infinita.<\/p>\n<p>Normalmente se guardan en <code>wp_options<\/code> con nombres como:<\/p>\n<ul>\n<li><code>_transient_nombre<\/code><\/li>\n<li><code>_transient_timeout_nombre<\/code><\/li>\n<li><code>_site_transient_nombre<\/code><\/li>\n<li><code>_site_transient_timeout_nombre<\/code><\/li>\n<\/ul>\n<p>WordPress elimina transients caducados cuando se consultan o mediante tareas programadas, pero en sitios con mucho movimiento pueden acumularse. Para borrarlos con WP-CLI:<\/p>\n<pre><code>wp transient delete --expired<\/code><\/pre>\n<p>Para eliminar todos los transients \u2014\u00fatil despu\u00e9s de migraciones o cambios importantes, pero no como deporte diario\u2014:<\/p>\n<pre><code>wp transient delete --all<\/code><\/pre>\n<p>Consulta SQL para contar transients:<\/p>\n<pre><code>SELECT COUNT(*) AS total_transients\nFROM wp_options\nWHERE option_name LIKE '\\_transient\\_%'\n   OR option_name LIKE '\\_site\\_transient\\_%';<\/code><\/pre>\n<p>En sitios con cach\u00e9 persistente de objetos, como Redis o Memcached, muchos transients no viven en la base de datos sino en memoria. Es una diferencia importante: borrar transients desde la base puede no afectar a los que est\u00e1n en el almac\u00e9n de objetos. La modernidad, ya se sabe, nos prometi\u00f3 simplificarlo todo y nos regal\u00f3 m\u00e1s capas.<\/p>\n<h2 id=\"woocommerce\">WooCommerce: optimizar sin romper la caja registradora \ud83d\uded2<\/h2>\n<p>WooCommerce transforma WordPress en una tienda. Tambi\u00e9n transforma la base de datos en una criatura mucho m\u00e1s activa. Pedidos, productos, variaciones, cupones, sesiones, carritos, webhooks, tareas programadas, informes, logs\u2026 Todo deja rastro. Y ese rastro puede ser necesario por razones fiscales, comerciales o legales. No todo lo viejo es basura.<\/p>\n<h3>\u00c1reas frecuentes de crecimiento<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u00c1rea<\/th>\n<th>Tablas habituales<\/th>\n<th>Riesgo<\/th>\n<th>Recomendaci\u00f3n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Sesiones de clientes<\/td>\n<td><code>wp_woocommerce_sessions<\/code><\/td>\n<td>Carritos abandonados acumulados.<\/td>\n<td>Usar herramientas internas de WooCommerce para limpiar sesiones caducadas.<\/td>\n<\/tr>\n<tr>\n<td>Action Scheduler<\/td>\n<td><code>wp_actionscheduler_actions<\/code>, <code>wp_actionscheduler_logs<\/code><\/td>\n<td>Millones de acciones completadas o fallidas.<\/td>\n<td>Purgar acciones antiguas desde WooCommerce o WP-CLI con criterio.<\/td>\n<\/tr>\n<tr>\n<td>Logs<\/td>\n<td><code>wp_woocommerce_log<\/code> o logs en archivos seg\u00fan versi\u00f3n\/configuraci\u00f3n<\/td>\n<td>Registros antiguos de pasarelas, errores o integraciones.<\/td>\n<td>Definir retenci\u00f3n y eliminar lo que no sea necesario.<\/td>\n<\/tr>\n<tr>\n<td>Productos variables<\/td>\n<td><code>wp_posts<\/code>, <code>wp_postmeta<\/code><\/td>\n<td>Muchas variaciones generan gran volumen de metadatos.<\/td>\n<td>Revisar consultas, cach\u00e9 de objetos y calidad de plugins de filtrado.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Limpiar sesiones de WooCommerce<\/h3>\n<p>WooCommerce incluye herramientas en el panel de administraci\u00f3n, generalmente en <strong>WooCommerce &gt; Estado &gt; Herramientas<\/strong>. Desde ah\u00ed puedes limpiar sesiones de clientes, transients de WooCommerce y otros datos temporales. Es preferible usar estas herramientas antes que ejecutar SQL manual, porque respetan la l\u00f3gica interna del plugin.<\/p>\n<h3>Action Scheduler<\/h3>\n<p>Action Scheduler es una biblioteca usada por WooCommerce y otros plugins para ejecutar tareas en segundo plano. Es muy \u00fatil, pero si hay fallos de cron, integraciones rotas o tareas que nunca se purgan, sus tablas pueden crecer con entusiasmo bot\u00e1nico.<\/p>\n<p>Para ver estados:<\/p>\n<pre><code>SELECT status, COUNT(*) AS total\nFROM wp_actionscheduler_actions\nGROUP BY status\nORDER BY total DESC;<\/code><\/pre>\n<p>Si hay muchas acciones <code>complete<\/code> antiguas, conviene revisar las herramientas de WooCommerce, WP-CLI o la documentaci\u00f3n del plugin que las genera. No elimines acciones pendientes sin entender qu\u00e9 hacen. En una tienda, una \u201ctarea pendiente\u201d puede ser un correo, una sincronizaci\u00f3n de stock o un pago en proceso. El dato parece fr\u00edo; el cliente al otro lado no lo es.<\/p>\n<h2 id=\"optimizar-tablas\">Optimizar tablas MySQL\/MariaDB: OPTIMIZE, ANALYZE y realidad t\u00e9cnica \ud83e\udde0<\/h2>\n<p>Despu\u00e9s de borrar muchos registros, las tablas pueden conservar espacio interno sin usar. En MySQL y MariaDB aparece como <code>Data_free<\/code> u overhead. Aqu\u00ed entra la tentaci\u00f3n de pulsar \u201cOptimizar tablas\u201d como quien pulsa un bot\u00f3n rojo en una pel\u00edcula. Funciona, pero conviene saber qu\u00e9 sucede.<\/p>\n<h3>OPTIMIZE TABLE<\/h3>\n<p>En tablas MyISAM, <code>OPTIMIZE TABLE<\/code> reorganiza datos e \u00edndices. En InnoDB \u2014el motor habitual en WordPress moderno\u2014 suele reconstruir la tabla y actualizar estad\u00edsticas. Puede recuperar espacio, especialmente si est\u00e1 activado <code>innodb_file_per_table<\/code>, pero tambi\u00e9n puede bloquear o consumir recursos durante la operaci\u00f3n seg\u00fan tama\u00f1o, versi\u00f3n y configuraci\u00f3n.<\/p>\n<pre><code>OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options;<\/code><\/pre>\n<p>No lo ejecutes alegremente en una tabla enorme de WooCommerce a mediod\u00eda, con campa\u00f1as activas y el due\u00f1o de la tienda mirando Analytics como quien mira el pulso de un paciente. Programa estas operaciones en horas de bajo tr\u00e1fico.<\/p>\n<h3>ANALYZE TABLE<\/h3>\n<p><code>ANALYZE TABLE<\/code> actualiza estad\u00edsticas que el optimizador de MySQL\/MariaDB usa para decidir c\u00f3mo ejecutar consultas. No limpia basura, pero puede ayudar a que el motor elija mejores planes de ejecuci\u00f3n.<\/p>\n<pre><code>ANALYZE TABLE wp_posts, wp_postmeta, wp_options;<\/code><\/pre>\n<h3>CHECK y REPAIR<\/h3>\n<p><code>CHECK TABLE<\/code> revisa tablas. <code>REPAIR TABLE<\/code> se usa sobre todo con MyISAM; en InnoDB, si hay corrupci\u00f3n, el camino suele ser m\u00e1s delicado y puede requerir restauraci\u00f3n, revisi\u00f3n de logs o intervenci\u00f3n del proveedor de hosting.<\/p>\n<pre><code>CHECK TABLE wp_posts;\nREPAIR TABLE wp_posts;<\/code><\/pre>\n<p>      <strong>Dato clave:<\/strong> WordPress usa mayoritariamente InnoDB en instalaciones actuales. MyISAM qued\u00f3 como una reliquia de otra \u00e9poca: r\u00e1pido en ciertas lecturas simples, pero sin transacciones ni bloqueo a nivel de fila. La vieja velocidad contra la integridad moderna; una ant\u00edtesis muy de bases de datos.<\/p>\n<h2 id=\"indices\">\u00cdndices: cuando una b\u00fasqueda deja de ser una excavaci\u00f3n \ud83d\uddc2\ufe0f<\/h2>\n<p>Un \u00edndice en base de datos funciona como el \u00edndice de un libro. Sin \u00e9l, MySQL puede tener que revisar demasiadas filas para encontrar lo que busca. Con \u00e9l, llega antes. Parece sencillo. Lo es y no lo es.<\/p>\n<p>WordPress ya crea \u00edndices b\u00e1sicos en sus tablas principales. A\u00f1adir \u00edndices personalizados puede mejorar consultas espec\u00edficas, sobre todo en sitios con mucho <code>postmeta<\/code>, filtros complejos, directorios, inmobiliarias, cat\u00e1logos enormes o WooCommerce con atributos intensivos. Pero cada \u00edndice adicional tambi\u00e9n ocupa espacio y ralentiza escrituras. El \u00edndice es mapa y lastre a la vez.<\/p>\n<p>Antes de a\u00f1adir \u00edndices:<\/p>\n<ul>\n<li>Identifica una consulta lenta real con Query Monitor, slow query log o <code>EXPLAIN<\/code>.<\/li>\n<li>Comprueba si el problema viene de un plugin mal dise\u00f1ado.<\/li>\n<li>Prueba el \u00edndice en staging.<\/li>\n<li>Mide antes y despu\u00e9s.<\/li>\n<li>Documenta el cambio para no perderlo en migraciones.<\/li>\n<\/ul>\n<p>Ejemplo de an\u00e1lisis con <code>EXPLAIN<\/code>:<\/p>\n<pre><code>EXPLAIN\nSELECT post_id\nFROM wp_postmeta\nWHERE meta_key = '_sku'\n  AND meta_value = 'ABC-123';<\/code><\/pre>\n<p>En WooCommerce, buscar por SKU es un caso t\u00edpico donde los metadatos importan. Sin embargo, no todos los problemas se resuelven con \u00edndices. A veces el verdadero remedio es cambiar el plugin de filtros, activar cach\u00e9 persistente, mejorar el hosting o redise\u00f1ar c\u00f3mo se consultan los datos.<\/p>\n<h2 id=\"plugins\">Plugins de limpieza: \u00fatiles, pero no sacerdotes del rendimiento \ud83d\udd0c<\/h2>\n<p>Existen plugins buenos para limpiar la base de datos de WordPress: WP-Optimize, Advanced Database Cleaner, WP Rocket en parte de mantenimiento, LiteSpeed Cache con herramientas de DB, entre otros. Pueden eliminar revisiones, borradores, transients, comentarios spam y optimizar tablas desde una interfaz c\u00f3moda.<\/p>\n<p>La comodidad tiene precio: si no sabes qu\u00e9 est\u00e1 borrando el plugin, delegas criterio. Y el criterio, en mantenimiento web, pesa m\u00e1s que el bot\u00f3n.<\/p>\n<h3>Qu\u00e9 debe tener un buen plugin de optimizaci\u00f3n<\/h3>\n<ul>\n<li>Permitir copia de seguridad previa o integrarse bien con tu sistema de backups.<\/li>\n<li>Mostrar claramente qu\u00e9 datos se eliminar\u00e1n.<\/li>\n<li>Diferenciar entre revisiones, transients, comentarios, metadatos hu\u00e9rfanos y tablas.<\/li>\n<li>Permitir programar limpiezas con l\u00edmites razonables.<\/li>\n<li>No borrar datos de WooCommerce sin advertencias espec\u00edficas.<\/li>\n<li>Tener mantenimiento activo y compatibilidad con la versi\u00f3n actual de WordPress.<\/li>\n<\/ul>\n<p>Los plugins son herramientas, no absoluciones. Un martillo sirve para clavar un cuadro; tambi\u00e9n para romper una tuber\u00eda. La diferencia no est\u00e1 en el martillo.<\/p>\n<h2 id=\"wp-cli\">WP-CLI: mantenimiento r\u00e1pido para quienes no temen la terminal \ud83d\udcbb<\/h2>\n<p>WP-CLI permite administrar WordPress desde l\u00ednea de comandos. Para desarrolladores, administradores de sistemas y agencias, es una joya discreta: limpia, exporta, busca, reemplaza, verifica y automatiza. No tiene interfaz bonita. Precisamente por eso no distrae.<\/p>\n<h3>Exportar base de datos<\/h3>\n<pre><code>wp db export backup-antes-optimizacion.sql<\/code><\/pre>\n<h3>Optimizar tablas<\/h3>\n<pre><code>wp db optimize<\/code><\/pre>\n<h3>Reparar tablas<\/h3>\n<pre><code>wp db repair<\/code><\/pre>\n<h3>Eliminar transients caducados<\/h3>\n<pre><code>wp transient delete --expired<\/code><\/pre>\n<h3>Buscar opciones grandes<\/h3>\n<pre><code>wp db query \"SELECT option_name, ROUND(LENGTH(option_value)\/1024,2) AS kb FROM wp_options ORDER BY LENGTH(option_value) DESC LIMIT 20;\"<\/code><\/pre>\n<h3>Eliminar revisiones con WP-CLI<\/h3>\n<pre><code>wp post delete $(wp post list --post_type='revision' --format=ids) --force<\/code><\/pre>\n<p>      <strong>Consejo:<\/strong> en sitios grandes, evita comandos que generen listas enormes de IDs en una sola ejecuci\u00f3n. Trabaja por lotes o usa herramientas espec\u00edficas para no saturar memoria o bloquear procesos.<\/p>\n<h2 id=\"hosting\">Servidor, cach\u00e9 y configuraci\u00f3n: la base de datos no vive sola \ud83c\udfd7\ufe0f<\/h2>\n<p>Una base de datos optimizada en un hosting pobre es como un viol\u00edn Stradivarius tocado en una estaci\u00f3n con altavoces rotos. Puede mejorar, s\u00ed, pero hay l\u00edmites. WordPress depende del conjunto: PHP, MySQL\/MariaDB, memoria, disco, red, cach\u00e9 y configuraci\u00f3n.<\/p>\n<h3>Factores del servidor que impactan en la base de datos<\/h3>\n<ul>\n<li><strong>Versi\u00f3n de PHP:<\/strong> usar versiones modernas y soportadas mejora rendimiento y seguridad.<\/li>\n<li><strong>MySQL\/MariaDB actualizado:<\/strong> versiones recientes suelen optimizar mejor consultas y uso de \u00edndices.<\/li>\n<li><strong>Discos SSD\/NVMe:<\/strong> reducen latencia de lectura\/escritura frente a discos tradicionales.<\/li>\n<li><strong>Memoria disponible:<\/strong> un servidor sin memoria suficiente recurrir\u00e1 a disco y todo se volver\u00e1 pesado.<\/li>\n<li><strong>InnoDB buffer pool:<\/strong> en servidores dedicados a base de datos, suele configurarse con una parte importante de la RAM disponible; en hosting compartido no tendr\u00e1s control fino.<\/li>\n<li><strong>Separaci\u00f3n de servicios:<\/strong> en proyectos grandes, separar web y base de datos puede mejorar escalabilidad.<\/li>\n<\/ul>\n<h3>Cach\u00e9 de p\u00e1gina y cach\u00e9 de objetos<\/h3>\n<p>La mejor consulta SQL es la que no se ejecuta. Ah\u00ed entra la cach\u00e9.<\/p>\n<p><strong>Cach\u00e9 de p\u00e1gina:<\/strong> guarda versiones HTML de p\u00e1ginas para servirlas sin reconstruir todo WordPress en cada visita. Es crucial para blogs, sitios corporativos y p\u00e1ginas de contenido.<\/p>\n<p><strong>Cach\u00e9 persistente de objetos:<\/strong> con Redis o Memcached, WordPress puede guardar resultados de consultas y objetos frecuentes en memoria. En WooCommerce, membres\u00edas y sitios con usuarios conectados, suele marcar una diferencia notable.<\/p>\n<p>Pero ojo: la cach\u00e9 no cura una base de datos enferma; a veces solo le pone maquillaje. Y el maquillaje, aunque \u00fatil en bodas y ruedas de prensa, no sustituye a dormir bien.<\/p>\n<h2 id=\"cron\">WP-Cron, tareas programadas y acumulaci\u00f3n silenciosa \u23f0<\/h2>\n<p>WordPress usa WP-Cron para ejecutar tareas programadas: publicar entradas futuras, limpiar transients, enviar correos, procesar acciones, sincronizar datos. A diferencia de un cron real del sistema, WP-Cron se dispara con visitas al sitio. Si no hay visitas, puede retrasarse. Si hay demasiadas, puede ejecutarse con m\u00e1s frecuencia de la deseada si no est\u00e1 bien controlado.<\/p>\n<p>En sitios profesionales conviene desactivar el disparador interno y usar un cron real:<\/p>\n<pre><code>define('DISABLE_WP_CRON', true);<\/code><\/pre>\n<p>Luego se configura una tarea cron en el servidor, por ejemplo cada 5 o 10 minutos:<\/p>\n<pre><code>wget -q -O - https:\/\/tudominio.com\/wp-cron.php?doing_wp_cron &gt;\/dev\/null 2&gt;&amp;1<\/code><\/pre>\n<p>O con WP-CLI:<\/p>\n<pre><code>wp cron event run --due-now<\/code><\/pre>\n<p>Si las tareas programadas fallan, algunas tablas crecen. Si crecen, las consultas se vuelven m\u00e1s lentas. Si se vuelven m\u00e1s lentas, las tareas fallan m\u00e1s. El c\u00edrculo perfecto, tan absurdo y tan humano como esperar que una bandeja de entrada se ordene sola.<\/p>\n<h2 id=\"seguridad\">Optimizaci\u00f3n y seguridad: limpiar tambi\u00e9n reduce superficie de riesgo \ud83d\udd10<\/h2>\n<p>Optimizar la base de datos no es solo acelerar. Tambi\u00e9n es reducir exposici\u00f3n. Plugins desinstalados que dejan opciones sensibles, usuarios antiguos, tokens caducados, sesiones olvidadas, logs con informaci\u00f3n t\u00e9cnica\u2026 Todo eso puede convertirse en material \u00fatil para un atacante si el sitio sufre una vulnerabilidad.<\/p>\n<p>Buenas pr\u00e1cticas:<\/p>\n<ul>\n<li>Elimina plugins y temas que no uses; no basta con desactivarlos eternamente.<\/li>\n<li>Revisa usuarios administradores y cuentas antiguas.<\/li>\n<li>Limpia sesiones caducadas si usas plugins de membres\u00eda o comercio electr\u00f3nico.<\/li>\n<li>No guardes backups SQL dentro de carpetas p\u00fablicas.<\/li>\n<li>Protege phpMyAdmin, Adminer y accesos de base de datos.<\/li>\n<li>Usa credenciales de base de datos con permisos adecuados, no m\u00e1s de los necesarios.<\/li>\n<li>Mant\u00e9n WordPress, plugins, tema y PHP actualizados.<\/li>\n<\/ul>\n<p>La seguridad y el rendimiento suelen presentarse como mundos distintos: una custodia la puerta, el otro abre ventanas. En realidad se encuentran en el mismo pasillo. Un sitio limpio es m\u00e1s r\u00e1pido y, con frecuencia, m\u00e1s dif\u00edcil de explotar.<\/p>\n<h2 id=\"multisite\">WordPress Multisite: optimizar un edificio, no una habitaci\u00f3n \ud83c\udfe2<\/h2>\n<p>En una instalaci\u00f3n Multisite, cada sitio puede tener sus propias tablas: <code>wp_2_posts<\/code>, <code>wp_2_options<\/code>, <code>wp_3_posts<\/code> y as\u00ed sucesivamente. Adem\u00e1s existen tablas globales de usuarios y red. La optimizaci\u00f3n requiere m\u00e1s paciencia porque el desorden se multiplica por cada sitio.<\/p>\n<p>Recomendaciones para Multisite:<\/p>\n<ul>\n<li>Audita tablas por tama\u00f1o y por sitio.<\/li>\n<li>Revisa sitios inactivos o abandonados.<\/li>\n<li>Controla plugins permitidos en red.<\/li>\n<li>Vigila especialmente opciones autoload en cada blog.<\/li>\n<li>Automatiza tareas con WP-CLI usando <code>--url=<\/code>.<\/li>\n<\/ul>\n<pre><code>wp site list --field=url\n\nwp --url=https:\/\/ejemplo.com\/sitio1 transient delete --expired<\/code><\/pre>\n<p>Multisite tiene una belleza administrativa: centraliza. Tambi\u00e9n una sombra: centraliza los errores. Un plugin pesado activado en red puede convertir la eficiencia en epidemia.<\/p>\n<h2 id=\"errores\">Errores comunes al optimizar la base de datos de WordPress \u26a0\ufe0f<\/h2>\n<p>La mayor\u00eda de desastres no vienen de operaciones sofisticadas, sino de impulsos sencillos. Estos son los tropiezos habituales:<\/p>\n<table>\n<thead>\n<tr>\n<th>Error<\/th>\n<th>Por qu\u00e9 es peligroso<\/th>\n<th>Qu\u00e9 hacer en su lugar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Borrar tablas \u201cque parecen viejas\u201d<\/td>\n<td>Pueden pertenecer a plugins activos o datos cr\u00edticos.<\/td>\n<td>Identificar origen, revisar documentaci\u00f3n y probar en staging.<\/td>\n<\/tr>\n<tr>\n<td>Ejecutar limpiezas agresivas sin backup<\/td>\n<td>La p\u00e9rdida puede ser irreversible.<\/td>\n<td>Backup completo y restauraci\u00f3n verificada.<\/td>\n<\/tr>\n<tr>\n<td>Optimizar tablas enormes en hora punta<\/td>\n<td>Puede bloquear o degradar el sitio.<\/td>\n<td>Programar mantenimiento en baja demanda.<\/td>\n<\/tr>\n<tr>\n<td>Instalar varios plugins de optimizaci\u00f3n<\/td>\n<td>Solapan funciones, generan conflictos y ruido.<\/td>\n<td>Usar una herramienta fiable y entender su alcance.<\/td>\n<\/tr>\n<tr>\n<td>Confundir cach\u00e9 con optimizaci\u00f3n real<\/td>\n<td>La cach\u00e9 oculta s\u00edntomas, pero no siempre resuelve causas.<\/td>\n<td>Medir consultas, limpiar datos y configurar cach\u00e9 correctamente.<\/td>\n<\/tr>\n<tr>\n<td>No revisar wp_options<\/td>\n<td>Opciones autoload grandes afectan muchas cargas.<\/td>\n<td>Auditar peri\u00f3dicamente opciones pesadas.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"mantenimiento\">Plan profesional de mantenimiento para una base de datos WordPress saludable \ud83d\udcc5<\/h2>\n<p>La optimizaci\u00f3n no deber\u00eda ser una ceremonia anual con incienso y miedo, sino una rutina. Un sitio bien mantenido envejece mejor. Y en Internet, envejecer bien ya es una forma de resistencia.<\/p>\n<h3>Mensualmente<\/h3>\n<ul>\n<li>Crear y verificar copias de seguridad.<\/li>\n<li>Eliminar comentarios spam y papelera.<\/li>\n<li>Borrar transients caducados.<\/li>\n<li>Revisar actualizaciones de WordPress, plugins y tema.<\/li>\n<li>Comprobar errores PHP y logs del servidor.<\/li>\n<\/ul>\n<h3>Trimestralmente<\/h3>\n<ul>\n<li>Auditar tama\u00f1o de tablas.<\/li>\n<li>Revisar opciones autoload pesadas en <code>wp_options<\/code>.<\/li>\n<li>Eliminar revisiones antiguas manteniendo un n\u00famero razonable.<\/li>\n<li>Limpiar metadatos hu\u00e9rfanos.<\/li>\n<li>Revisar plugins desinstalados que dejaron tablas u opciones.<\/li>\n<li>Medir TTFB y rendimiento con herramientas como WebPageTest, PageSpeed Insights o GTmetrix.<\/li>\n<\/ul>\n<h3>Semestralmente<\/h3>\n<ul>\n<li>Auditar plugins activos: necesidad, calidad, impacto y mantenimiento.<\/li>\n<li>Revisar slow query log si el hosting lo permite.<\/li>\n<li>Evaluar cach\u00e9 persistente de objetos para sitios din\u00e1micos.<\/li>\n<li>Probar restauraci\u00f3n completa en staging.<\/li>\n<li>Revisar configuraci\u00f3n de WP-Cron y tareas programadas.<\/li>\n<\/ul>\n<h3>En WooCommerce o sitios cr\u00edticos<\/h3>\n<ul>\n<li>Monitorizar Action Scheduler semanalmente.<\/li>\n<li>Limpiar sesiones caducadas.<\/li>\n<li>Revisar logs de pasarelas de pago e integraciones.<\/li>\n<li>Medir rendimiento del checkout sin cach\u00e9 de p\u00e1gina.<\/li>\n<li>Coordinar limpiezas con horarios de baja venta.<\/li>\n<\/ul>\n<h2 id=\"paso-a-paso\">Procedimiento recomendado paso a paso \u2705<\/h2>\n<p>Si quieres una ruta clara, esta ser\u00eda mi secuencia preferida para optimizar la base de datos de WordPress sin improvisar demasiado:<\/p>\n<ol>\n<li><strong>Haz backup completo<\/strong> de archivos y base de datos.<\/li>\n<li><strong>Clona el sitio en staging<\/strong> si hay ventas, usuarios o datos cr\u00edticos.<\/li>\n<li><strong>Mide el rendimiento actual<\/strong>: TTFB, consultas lentas, tama\u00f1o de tablas.<\/li>\n<li><strong>Revisa <code>wp_options<\/code><\/strong> y detecta opciones autoload pesadas.<\/li>\n<li><strong>Limpia revisiones antiguas<\/strong>, papelera, spam y borradores innecesarios.<\/li>\n<li><strong>Elimina transients caducados<\/strong>.<\/li>\n<li><strong>Limpia metadatos hu\u00e9rfanos<\/strong> con SQL probado o plugin fiable.<\/li>\n<li><strong>Revisa WooCommerce<\/strong> si aplica: sesiones, acciones programadas y logs.<\/li>\n<li><strong>Optimiza o analiza tablas<\/strong> en horario de bajo tr\u00e1fico.<\/li>\n<li><strong>Comprueba el sitio<\/strong>: frontend, login, checkout, formularios, b\u00fasquedas y panel.<\/li>\n<li><strong>Mide de nuevo<\/strong> y compara datos, no sensaciones.<\/li>\n<li><strong>Programa mantenimiento peri\u00f3dico<\/strong> con l\u00edmites prudentes.<\/li>\n<\/ol>\n<h2 id=\"consultas-utiles\">Consultas SQL \u00fatiles para auditor\u00eda r\u00e1pida \ud83e\uddfe<\/h2>\n<p>Estas consultas ayudan a inspeccionar sin modificar. Aun as\u00ed, ejec\u00fatalas con cuidado y cambia el prefijo si tu instalaci\u00f3n no usa <code>wp_<\/code>.<\/p>\n<h3>Tablas m\u00e1s grandes<\/h3>\n<pre><code>SELECT \n  table_name,\n  ROUND((data_length + index_length) \/ 1024 \/ 1024, 2) AS total_mb\nFROM information_schema.tables\nWHERE table_schema = DATABASE()\nORDER BY total_mb DESC\nLIMIT 20;<\/code><\/pre>\n<h3>Total de revisiones<\/h3>\n<pre><code>SELECT COUNT(*) AS revisiones\nFROM wp_posts\nWHERE post_type = 'revision';<\/code><\/pre>\n<h3>Opciones m\u00e1s pesadas<\/h3>\n<pre><code>SELECT \n  option_name,\n  autoload,\n  ROUND(LENGTH(option_value) \/ 1024 \/ 1024, 2) AS tama\u00f1o_mb\nFROM wp_options\nORDER BY LENGTH(option_value) DESC\nLIMIT 25;<\/code><\/pre>\n<h3>Autoload total<\/h3>\n<pre><code>SELECT \n  ROUND(SUM(LENGTH(option_value)) \/ 1024 \/ 1024, 2) AS autoload_total_mb\nFROM wp_options\nWHERE autoload IN ('yes', 'on', 'auto-on');<\/code><\/pre>\n<h3>Metadatos de posts hu\u00e9rfanos<\/h3>\n<pre><code>SELECT COUNT(*) AS postmeta_huerfanos\nFROM wp_postmeta pm\nLEFT JOIN wp_posts p ON p.ID = pm.post_id\nWHERE p.ID IS NULL;<\/code><\/pre>\n<h3>Comentarios spam y papelera<\/h3>\n<pre><code>SELECT comment_approved, COUNT(*) AS total\nFROM wp_comments\nGROUP BY comment_approved;<\/code><\/pre>\n<h2 id=\"cuanto-mejora\">\u00bfCu\u00e1nto puede mejorar el tiempo de carga? \ud83d\udcc8<\/h2>\n<p>La respuesta honesta es: depende. Y aunque \u201cdepende\u201d suene a evasiva de consultor, aqu\u00ed es la verdad. Si tu sitio tiene una base de datos razonable y el problema principal son im\u00e1genes de 4 MB, limpiar revisiones no har\u00e1 milagros. Si, en cambio, <code>wp_options<\/code> carga 12 MB en cada petici\u00f3n, hay millones de acciones programadas o un plugin ejecuta consultas sin \u00edndice, la mejora puede ser notable.<\/p>\n<p>En optimizaci\u00f3n WordPress conviene distinguir entre:<\/p>\n<ul>\n<li><strong>Mejoras perceptibles:<\/strong> el administrador carga m\u00e1s r\u00e1pido, el checkout responde mejor, las b\u00fasquedas tardan menos.<\/li>\n<li><strong>Mejoras medibles:<\/strong> baja el TTFB, disminuye el tiempo de consulta, se reduce CPU o memoria.<\/li>\n<li><strong>Mejoras preventivas:<\/strong> hoy no se notan mucho, pero evitan problemas futuros.<\/li>\n<\/ul>\n<p>La limpieza de base de datos no siempre produce titulares espectaculares. A veces produce algo m\u00e1s valioso: estabilidad. Menos errores intermitentes. Menos picos de CPU. Menos esperas en el panel. La velocidad, cuando es buena de verdad, no presume; simplemente deja de estorbar.<\/p>\n<h2 id=\"cierre\">La velocidad tambi\u00e9n es una forma de respeto<\/h2>\n<p>Optimizar la base de datos de WordPress es mirar debajo de la alfombra del sitio. No para avergonzarse del polvo, sino para entender que todo sistema vivo acumula restos: decisiones antiguas, plugins probados una tarde, campa\u00f1as pasadas, revisiones de textos que ya nadie leer\u00e1, sesiones de usuarios que se marcharon sin despedirse.<\/p>\n<p>Un WordPress r\u00e1pido no se consigue \u00fanicamente con un plugin de cach\u00e9 ni con una promesa de hosting \u201cturbo\u201d. Se consigue equilibrando opuestos: conservar lo necesario y borrar lo in\u00fatil, automatizar sin perder criterio, acelerar sin romper, simplificar sin empobrecer. Ah\u00ed est\u00e1 el oficio.<\/p>\n<p>Haz copias. Mide. Limpia. Revisa <code>wp_options<\/code>. Controla transients. Respeta WooCommerce. Usa WP-CLI si puedes. Optimiza tablas cuando tenga sentido. Y, sobre todo, mant\u00e9n una rutina. Porque una base de datos cuidada trabaja como un r\u00edo despejado: no hace ruido, no pide aplausos, simplemente fluye. \ud83c\udf3f<\/p>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>WordPress \u00b7 Rendimiento \u00b7 Base de datos \u2699\ufe0f \u00bfC\u00f3mo optimizar la base de datos de<\/p>\n","protected":false},"author":1,"featured_media":3657,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-3658","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mantenimiento"],"_links":{"self":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/comments?post=3658"}],"version-history":[{"count":1,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3658\/revisions"}],"predecessor-version":[{"id":3659,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3658\/revisions\/3659"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media\/3657"}],"wp:attachment":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media?parent=3658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/categories?post=3658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/tags?post=3658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}