Uno de los principales retos que enfrentan los desarrolladores y administradores de sitios WordPress es la eficiencia y rapidez en la gestión de datos. Hoy, te presentamos una serie de optimizaciones en las tablas MySQL que prometen mejorar significativamente la velocidad de tu sitio web en WordPress.
El foco principal: La tabla wp_postmeta
La tabla wp_postmeta suele ser la más grande de tu base de datos en WordPress. Si no lo es, podrías estar frente a un problema. Es importante también revisar las tablas wp_actionscheduler_actions y wp_actionscheduler_logs.
Cuando instalas WordPress por primera vez, se crean tablas en la base de datos. Tomando como ejemplo la tabla wp_postmeta, su estructura inicial es:
CREATE TABLE wp_postmeta (
meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
post_id bigint(20) unsigned NOT NULL DEFAULT '0',
meta_key varchar(255) DEFAULT NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY post_id (post_id),
KEY meta_key (meta_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
¿Cuál es el problema?
- AUTO_INCREMENT ralentiza la mayoría de las consultas debido a que tiene que buscar en el índice secundario para encontrar el ID auto_incrementado, y luego buscar en los datos el ID real necesario.
- BIGINT y AUTO_INCREMENT son excesivos.
- meta_key o meta_value nunca serán NULL.
Solución propuesta:
CREATE TABLE wp_postmeta (
post_id BIGINT UNSIGNED NOT NULL,
meta_key VARCHAR(255) NOT NULL,
meta_value LONGTEXT NOT NULL,
PRIMARY KEY(post_id, meta_key),
INDEX(meta_key)
) ENGINE=InnoDB;
En tablas existentes, podemos añadir claves de alto rendimiento que coincidan con las consultas más comunes de WordPress. Por ejemplo, para wp_postmeta:
ALTER TABLE wp_postmeta ADD UNIQUE KEY meta_id (meta_id);
ALTER TABLE wp_postmeta DROP PRIMARY KEY;
ALTER TABLE wp_postmeta ADD PRIMARY KEY (post_id, meta_key, meta_id);
ALTER TABLE wp_postmeta DROP KEY post_id;
ALTER TABLE wp_postmeta DROP KEY meta_key;
ALTER TABLE wp_postmeta ADD KEY meta_key (meta_key, post_id);
Esto generará nuevas claves de alto rendimiento. La comparativa quedaría:
Tabla | Claves estándar de WP | Nuevas claves |
---|---|---|
wp_postmeta | meta_id: primary key post_id meta_key | post_id, meta_key, meta_id: primary key meta_id: unique key meta_key, post_id |
Se puede hacer lo mismo para otras tablas principales:
wp_posts
ALTER TABLE wp_posts DROP KEY type_status_date;
ALTER TABLE wp_posts ADD KEY type_status_date (post_type, post_status, post_date, post_author, ID);
ALTER TABLE wp_posts DROP KEY post_author;
ALTER TABLE wp_posts ADD KEY post_author (post_author, post_type, post_status, post_date, ID);
Tabla | Claves estándar de WP | Nuevas claves |
---|---|---|
wp_posts | post_type, post_status, post_date,ID post_author | post_type,post_status,post_date,post_author,ID post_author,post_type,post_status,post_date,ID |
wp_options
ALTER TABLE wp_options ADD UNIQUE KEY option_id (option_id);
ALTER TABLE wp_options DROP PRIMARY KEY;
ALTER TABLE wp_options ADD PRIMARY KEY (autoload, option_id);
ALTER TABLE wp_options DROP KEY autoload;
Tabla | Claves estándar de WP | Nuevas claves |
---|---|---|
wp_options | option_id: primary key option_name: unique key autoload | autoload, option_id: primary key option_name: unique_key option_id: unique key |
wp_usermeta
ALTER TABLE wp_usermeta ADD UNIQUE KEY umeta_id (umeta_id);
ALTER TABLE wp_usermeta DROP PRIMARY KEY;
ALTER TABLE wp_usermeta ADD PRIMARY KEY (user_id, meta_key, umeta_id);
ALTER TABLE wp_usermeta DROP KEY user_id;
ALTER TABLE wp_usermeta DROP KEY meta_key;
ALTER TABLE wp_usermeta ADD KEY meta_key (meta_key, user_id);
Tabla | Claves estándar de WP | Nuevas claves |
---|---|---|
wp_usermeta | umeta_id: primary key user_id meta_key | user_id, meta_key, umeta_id: primary key umeta_id: unique key meta_key, user_id |
wp_termmeta
ALTER TABLE wp_termmeta ADD UNIQUE KEY meta_id (meta_id);
ALTER TABLE wp_termmeta DROP PRIMARY KEY;
ALTER TABLE wp_termmeta ADD PRIMARY KEY (term_id, meta_key, meta_id);
ALTER TABLE wp_termmeta DROP KEY term_id;
ALTER TABLE wp_termmeta DROP KEY meta_key;
ALTER TABLE wp_termmeta ADD KEY meta_key (meta_key, term_id);
Tabla | Claves estándar de WP | Nuevas claves |
---|---|---|
wp_termmeta | meta_id: primary key term_id meta_key | term_id, meta_key, meta_id: primary key meta_id: unique key meta_key, term_id |
Para aquellos interesados en realizar estos cambios de manera automática, existen plugins como «Index WP MySQL For Speed» que simplifican este proceso. Es fundamental que, antes de realizar cualquier cambio, se haga un respaldo de la base de datos para evitar problemas imprevistos.
Con estas optimizaciones, los sitios WordPress no solo serán más rápidos, sino también más eficientes en su gestión de datos. ¡Una revolución en rendimiento a la vista!