Guía de las tablas de la base de datos de WordPress

Introducción a la base de datos de WordPress
La solución CMS de WordPress utiliza una base de datos MySQL o MariaDB para almacenar prácticamente todo en tu web: desde las entradas y las páginas hasta los comentarios, los datos de usuario, los ajustes y las configuraciones de los plugins. Comprender la estructura de la base de datos es clave para la administración avanzada de una web WordPress, la resolución de problemas, la optimización del rendimiento y unas copias de seguridad correctas. Cada instalación de WordPress crea 12 tablas predeterminadas que, en conjunto, conforman el sistema completo de gestión de contenidos.
El prefijo predeterminado de las tablas de WordPress es wp_, pero se recomienda cambiar el prefijo durante la instalación por motivos de seguridad, porque los atacantes que intentan ataques de inyección SQL suelen apuntar al prefijo estándar wp_. Al cambiarlo por algo como bh29_, dificultas los ataques automatizados. En esta guía utilizamos el prefijo estándar wp_ por claridad, pero ten en cuenta que tu web puede usar un prefijo distinto.
wp_posts: el corazón de WordPress
Estructura de la tabla
La tabla wp_posts es la más importante de la base de datos de WordPress porque almacena todo el contenido, incluidas las entradas, las páginas, los archivos multimedia adjuntos, las revisiones, los elementos de menú y los tipos de contenido personalizados. Cada fila de la tabla representa un objeto de contenido con columnas como ID, que es un identificador único, post_author, que hace referencia al usuario que creó el contenido, post_date para la fecha de creación, post_content para el contenido principal en formato HTML, post_title para el título, post_excerpt para la descripción breve, post_status para el estado (publish, draft, pending, private, trash) y post_type para el tipo de contenido.
Tipos de contenido en wp_posts
La columna post_type determina el tipo de contenido. El valor post indica entradas de blog, page indica páginas, attachment indica archivos multimedia subidos, revision almacena versiones anteriores del contenido, nav_menu_item almacena elementos del menú de navegación, y los tipos de contenido personalizados tienen su propio slug. Esto significa que en la misma tabla puedes tener miles de entradas, cientos de páginas, miles de archivos multimedia y decenas de miles de revisiones. Las revisiones son una causa habitual de sobrecarga de la base de datos, porque WordPress, de forma predeterminada, almacena un número ilimitado de revisiones de cada entrada.
Optimizar wp_posts
Limita el número de revisiones añadiendo la constante WP_POST_REVISIONS en wp-config.php. El valor 5 conserva las últimas 5 revisiones de cada entrada, lo que es suficiente para la mayoría de las webs. Elimina periódicamente las revisiones antiguas, las entradas en estado auto-draft y las entradas borradas de la papelera mediante el plugin WP-Optimize o una consulta SQL directa. Para las webs con un gran número de entradas, indexar las columnas post_type y post_status acelera las consultas. Si utilizas tipos de contenido personalizados con WP_Query, especifica siempre post_type en la consulta para evitar escanear toda la tabla.
wp_postmeta: metadatos del contenido
Estructura y finalidad
La tabla wp_postmeta almacena datos adicionales sobre el contenido que no cubren las columnas de wp_posts. La estructura es un modelo EAV (entidad-atributo-valor) con cuatro columnas: meta_id, post_id, que hace referencia a wp_posts, meta_key, que es el nombre del metadato, y meta_value, que es el valor. En esta tabla es donde ACF (Advanced Custom Fields) almacena todos los campos personalizados, donde WooCommerce almacena los precios y los atributos de los productos, y donde WordPress almacena el ID de la imagen destacada, el archivo de plantilla, los datos serializados y mucho más.
El problema de wp_postmeta
La tabla wp_postmeta es la causa más habitual de problemas de rendimiento porque crece muy rápido. Cada entrada puede tener decenas o cientos de entradas de metadatos. ACF añade al menos dos filas por campo (valor y referencia), WooCommerce añade de 20 a 50 entradas de metadatos por producto, y cada plugin puede añadir sus propias entradas de metadatos. Una web con 1.000 entradas puede tener fácilmente 100.000 o más filas en wp_postmeta. Un índice ausente o no óptimo en la columna meta_key es una causa habitual de consultas lentas.
Optimizar wp_postmeta
Añade un índice en la columna meta_key si no existe, porque el índice predeterminado de WordPress en esta columna tiene una longitud limitada. Utiliza el plugin WP-Optimize o Advanced Database Cleaner para identificar y eliminar las entradas de metadatos huérfanas que pertenecen a entradas borradas. Para las consultas meta_query frecuentes, plantéate crear una tabla personalizada en lugar de usar wp_postmeta, porque una tabla personalizada con columnas específicas es mucho más rápida que el modelo EAV. Evita almacenar grandes arrays serializados en meta_value, porque no se pueden consultar de forma eficiente.
wp_options: ajustes de la web
Estructura y contenido
La tabla wp_options almacena todos los ajustes de la web WordPress, incluidos el nombre del sitio, la URL, el correo del administrador, el tema activo, los plugins activos, la estructura de enlaces permanentes, la zona horaria y otros cientos de ajustes. Cada plugin y tema puede añadir sus propias filas a wp_options para almacenar su configuración. La columna autoload, con el valor yes o no, determina si la opción se carga automáticamente en cada petición o solo cuando se solicita expresamente.
El problema del autoload
WordPress carga en memoria todas las opciones con autoload=yes en cada petición. Si tienes muchos plugins, esta tabla puede tener cientos de opciones con autoload y un tamaño total de varios megabytes. Esto consume RAM y ralentiza cada petición, incluso en páginas que no utilizan esas opciones. Comprueba el tamaño total de las opciones con autoload mediante una consulta SQL que sume el tamaño de option_value de todas las filas donde autoload sea yes. Si el resultado supera 1 MB, tienes un problema que hay que solucionar.
Limpiar wp_options
Los plugins que se han eliminado suelen dejar sus opciones en la tabla, porque WordPress no tiene un mecanismo de limpieza automática. Los datos transient, que son una caché temporal, se almacenan en wp_options con claves que empiezan por _transient_ y pueden acumular miles de filas. Utiliza un plugin como Advanced Database Cleaner para identificar las opciones de plugins borrados y los transients caducados. De forma manual, puedes cambiar autoload a no para las opciones que se usan en raras ocasiones mediante una consulta SQL en phpMyAdmin, pero ten cuidado de no modificar las opciones principales de WordPress.
wp_users y wp_usermeta
Datos de usuario
La tabla wp_users almacena los datos básicos del usuario, incluidos ID, user_login para el nombre de usuario, user_pass para la contraseña con hash, user_nicename para la versión del nombre apta para URL, user_email, user_url para la web del usuario, user_registered para la fecha de registro, user_activation_key para la activación de la cuenta y user_status. WordPress utiliza el hashing phpass para las contraseñas, con un número ajustable de iteraciones para protegerse de los ataques de fuerza bruta sobre el hash.
Metadatos de usuario
La tabla wp_usermeta tiene la misma estructura EAV que wp_postmeta y almacena datos adicionales del usuario, como el rol del usuario en wp_capabilities, el nivel de acceso en wp_user_level, las preferencias del panel de administración, la disposición de los widgets del escritorio y todos los campos de usuario personalizados. WooCommerce añade las direcciones de envío y facturación como metadatos de usuario. Los plugins de membresía y LMS pueden añadir decenas de entradas de metadatos por usuario. Para las webs con muchos usuarios, wp_usermeta puede convertirse en una tabla muy grande.
Tablas de comentarios y enlaces
wp_comments y wp_commentmeta
La tabla wp_comments almacena todos los comentarios de las entradas, con columnas para el ID del comentario, post_id para vincularlo a la entrada, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved para el estado de aprobación, comment_parent para las respuestas a comentarios y user_id para los usuarios registrados. Los comentarios de spam se marcan con comment_approved=spam pero permanecen en la tabla hasta que los borras. El plugin Akismet y herramientas antispam similares utilizan wp_commentmeta para almacenar las puntuaciones de spam y otros metadatos.
wp_terms, wp_termmeta y wp_term_taxonomy
WordPress utiliza tres tablas para las taxonomías. La tabla wp_terms almacena los propios términos con ID, name para el nombre, slug para la URL y term_group para la agrupación. La tabla wp_term_taxonomy vincula los términos a las taxonomías y almacena el tipo de taxonomía, la descripción, el ID padre para la jerarquía y count para el número de entradas. La tabla wp_term_relationships es una tabla de unión que vincula las entradas con los términos, con las columnas object_id para el ID de la entrada y term_taxonomy_id. La tabla wp_termmeta añade la posibilidad de almacenar metadatos de los términos, como la imagen o el color de una categoría.
Optimización de la base de datos de WordPress
Mantenimiento periódico
La base de datos de WordPress requiere un mantenimiento periódico para un rendimiento óptimo. Las acciones clave incluyen eliminar las revisiones de entradas con más de 30 días, limpiar las entradas en estado auto-draft y las de la papelera, borrar los comentarios de spam y de la papelera, eliminar los transients caducados de wp_options, optimizar las tablas con el comando OPTIMIZE TABLE y comprobar la integridad de las tablas con CHECK TABLE. El plugin WP-Optimize automatiza todas estas operaciones, con la posibilidad de programar limpiezas semanales o mensuales.
Índices y rendimiento
Los índices son clave para que las consultas a la base de datos sean más rápidas. WordPress crea índices predeterminados, pero para las webs con un gran número de entradas o consultas personalizadas, los índices adicionales pueden mejorar notablemente el rendimiento. Utiliza EXPLAIN antes de una consulta SQL en phpMyAdmin para ver si la consulta usa índices o realiza un escaneo completo de la tabla. Para las consultas meta_query frecuentes sobre un meta_key concreto, añade un índice compuesto en las columnas post_id y meta_key de wp_postmeta. El plugin de WordPress Query Monitor muestra todas las consultas SQL de una página con sus tiempos de ejecución e identifica las consultas lentas.
Tamaño de la base de datos
Controla el tamaño de la base de datos con regularidad, porque una base de datos sobrecargada ralentiza las copias de seguridad, las migraciones y las operaciones diarias. Un blog WordPress medio debería tener una base de datos de menos de 100 MB. Si tu base de datos supera los 500 MB, probablemente tengas un problema con las revisiones, los transients o los datos de los plugins. Las webs WooCommerce con muchos productos y pedidos tienen, de forma natural, bases de datos más grandes, pero incluso así hay que limpiar los datos obsoletos. En BeoHosting nuestros planes de hosting incluyen espacio suficiente para la base de datos, pero una base de datos optimizada significa una web más rápida para tus visitantes.
Copia de seguridad de la base de datos de WordPress
Métodos de copia de seguridad
Hay varias formas de hacer una copia de seguridad de la base de datos de WordPress. La función de exportación de phpMyAdmin te permite descargar manualmente un archivo de volcado SQL con todas las tablas y datos. El comando de WP-CLI wp db export crea un archivo de volcado desde la línea de comandos, lo que resulta adecuado para la automatización. Los plugins de WordPress como UpdraftPlus, BackWPup y All-in-One WP Migration ofrecen copias de seguridad programadas y automáticas con subida a almacenamiento en la nube como Google Drive, Dropbox o Amazon S3. En BeoHosting realizamos copias de seguridad diarias y automáticas de toda la cuenta de hosting, incluida la base de datos, con restauración con un clic en cPanel.
Buenas prácticas de copia de seguridad
Haz una copia de seguridad antes de cada actualización de WordPress, del tema o de un plugin. Guarda las copias de seguridad en varias ubicaciones, no solo en el mismo servidor. Prueba periódicamente la restauración de las copias de seguridad en un entorno de staging para confirmar que son correctas. Automatiza las copias de seguridad diarias con una política de retención de al menos 30 días. Para las webs de comercio electrónico con transacciones frecuentes, plantéate copias de seguridad cada 6 o 12 horas. Cifra las copias de seguridad que contengan datos sensibles, como información de usuarios o datos de pago.
Temas avanzados
Tablas de Multisite
Una instalación Multisite de WordPress crea tablas adicionales para gestionar la red de sitios. La tabla wp_blogs contiene información sobre cada sitio de la red, wp_site almacena los datos de la red y wp_sitemeta almacena los metadatos de la red. Cada sitio de la red obtiene su propio conjunto de tablas con un prefijo que incluye el ID del sitio, como wp_2_posts para el segundo sitio, wp_3_options para el tercer sitio, y así sucesivamente. Esto significa que una instalación Multisite con 10 sitios tiene más de 120 tablas en la base de datos.
Tablas personalizadas
Para los plugins y temas con requisitos de datos específicos, crear tablas personalizadas suele ser mejor que usar wp_postmeta. Una tabla personalizada con columnas e índices específicos es enormemente más rápida en las consultas que el modelo EAV de wp_postmeta. Utiliza la función dbDelta de WordPress para crear y actualizar tablas personalizadas, porque compara automáticamente la estructura existente con la deseada y aplica solo los cambios necesarios. Registra la activación del plugin con register_activation_hook para crear las tablas durante la instalación del plugin y proporciona un hook de desinstalación para la limpieza cuando se elimine el plugin.
Conclusión
Comprender las tablas de la base de datos de WordPress es un conocimiento fundamental para todo administrador y desarrollador de WordPress serio. Las tablas wp_posts y wp_postmeta almacenan todo el contenido, wp_options almacena la configuración, y wp_users y wp_usermeta almacenan los datos de usuario. El mantenimiento periódico de la base de datos, eliminando revisiones innecesarias, transients y datos huérfanos, mantiene la web rápida. Una indexación correcta acelera las consultas y las copias de seguridad periódicas protegen los datos frente a la pérdida. En BeoHosting nuestros servidores MySQL optimizados y las copias de seguridad automáticas proporcionan una base fiable para tu web WordPress, con un soporte que conoce las bases de datos a fondo.
BeoHosting Team
10+ años de experiencia — Especialistas en alojamiento web e infraestructura
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Última actualización: