Optimización en bases de datos de WordPress: Aumentando el rendimiento 🚀

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?

  1. 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.
  2. BIGINT y AUTO_INCREMENT son excesivos.
  3. 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:

TablaClaves estándar de WPNuevas claves
wp_postmetameta_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);
TablaClaves estándar de WPNuevas claves
wp_postspost_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;
TablaClaves estándar de WPNuevas claves
wp_optionsoption_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);
TablaClaves estándar de WPNuevas claves
wp_usermetaumeta_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);
TablaClaves estándar de WPNuevas claves
wp_termmetameta_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!

Suscríbete a la newsletter





Últimos artículos

Scroll al inicio