La tabla wp_options suele “engordar” con datos de temas y plugins (opciones, transients, sesiones, etc.). Si tu wp-admin va lento o ves consultas repetidas a wp_options, hay dos palancas claras:
wp_options.Aquí tienes una guía paso a paso para comprobar, decidir si conviene, crear el índice compuesto recomendado y medir el impacto. Incluyo equivalentes con WP-CLI y rollback seguro.
wp_options?WordPress trae por defecto:
option_idoption_nameLo que no trae es un índice por autoload, útil para consultas del tipo:
SELECT option_name, option_value
FROM wp_options
WHERE autoload = 'yes';
Lenguaje del código: JavaScript (javascript)
SHOW INDEX FROM wp_options;
wp db query "SHOW INDEX FROM $(wp db prefix)options;"
Lenguaje del código: JavaScript (javascript)
Si ves un índice adicional con Column_name = autoload (o un compuesto autoload, option_name) ya lo tienes. Si no, sigue.
Atajo para listar solo “no estándar”:
SHOW INDEX FROM wp_options
WHERE column_name NOT IN ('option_id','option_name');
Lenguaje del código: JavaScript (javascript)
wp db query "SHOW INDEX FROM $(wp db prefix)options WHERE column_name NOT IN ('option_id','option_name');"
Lenguaje del código: JavaScript (javascript)
El índice autoload, option_name aporta más cuando la mayoría de filas NO se autoloadan (es decir, autoload='no' es muy superior a autoload='yes'). Como regla de pulgar: si 60–80 % o más de las filas son autoload='no', el índice suele merecer la pena.
-- autoload = 'yes'
SELECT COUNT(*) AS AutoloadYes
FROM wp_options
WHERE autoload = 'yes';
-- autoload = 'no'
SELECT COUNT(*) AS AutoloadNo
FROM wp_options
WHERE autoload = 'no';
Lenguaje del código: PHP (php)
WP-CLI:
wp db query "SELECT COUNT(*) AS AutoloadYes FROM $(wp db prefix)options WHERE autoload='yes';"
wp db query "SELECT COUNT(*) AS AutoloadNo FROM $(wp db prefix)options WHERE autoload='no';"
Lenguaje del código: JavaScript (javascript)
Nota: las búsquedas por
option_name = 'algo'ya usan el índice único deoption_name. El índice que añadimos está orientado a cargar autoload y a ciertos barridos porautoload.
Opción rápida (CREATE INDEX):
CREATE INDEX autoloadindex
ON wp_options (autoload, option_name);
WP-CLI:
wp db query "CREATE INDEX autoloadindex ON $(wp db prefix)options (autoload, option_name);"
Lenguaje del código: JavaScript (javascript)
Opción con DDL “online” (menos bloqueo) usando ALTER TABLE:
(soportado en InnoDB MySQL ≥ 5.7 / 8.0; MariaDB tiene matices)
ALTER TABLE wp_options
ADD INDEX autoloadindex (autoload, option_name),
ALGORITHM=INPLACE, LOCK=NONE;
WP-CLI:
wp db query "ALTER TABLE $(wp db prefix)options ADD INDEX autoloadindex (autoload, option_name), ALGORITHM=INPLACE, LOCK=NONE;"
Lenguaje del código: JavaScript (javascript)
Por qué compuesto: consultas por
autoload='yes'obtienen búsqueda selectiva, y si además el motor necesita ordenar/filtrar poroption_name, el compuesto ayuda a evitar filesorts.
Comprueba el plan de ejecución antes y después del cambio:
EXPLAIN SELECT option_name, option_value
FROM wp_options
WHERE autoload='yes';
Lenguaje del código: JavaScript (javascript)
En MySQL 8.0 puedes usar:
EXPLAIN ANALYZE SELECT ...;
Deberías ver key: autoloadindex y type: ref (o similar), con menos filas examinadas.
ALTER TABLE ... ALGORITHM=INPLACE, LOCK=NONE para minimizar bloqueos (si tu versión lo soporta).wp_options.Si tu cuello de botella era wp_options, deberías notar:
DROP INDEX autoloadindex ON wp_options;
WP-CLI:
wp db query "DROP INDEX autoloadindex ON $(wp db prefix)options;"
Lenguaje del código: JavaScript (javascript)
El índice acelera el acceso en disco, pero si puedes, añade object cache persistente:
autoload yes/no y decidir.Comprobar índices “no estándar”:
wp db query "SHOW INDEX FROM $(wp db prefix)options WHERE column_name NOT IN ('option_id','option_name');"
Lenguaje del código: JavaScript (javascript)
Contar autoload sí/no:
wp db query "SELECT COUNT(*) AS AutoloadYes FROM $(wp db prefix)options WHERE autoload='yes';"
wp db query "SELECT COUNT(*) AS AutoloadNo FROM $(wp db prefix)options WHERE autoload='no';"
Lenguaje del código: JavaScript (javascript)
Crear índice compuesto (rápido):
wp db query "CREATE INDEX autoloadindex ON $(wp db prefix)options (autoload, option_name);"
Lenguaje del código: JavaScript (javascript)
Crear índice con menos bloqueo (si compatible):
wp db query "ALTER TABLE $(wp db prefix)options ADD INDEX autoloadindex (autoload, option_name), ALGORITHM=INPLACE, LOCK=NONE;"
Lenguaje del código: JavaScript (javascript)
Ver plan (EXPLAIN):
wp db query "EXPLAIN SELECT option_name, option_value FROM $(wp db prefix)options WHERE autoload='yes';"
Lenguaje del código: JavaScript (javascript)
Eliminar índice (rollback):
wp db query "DROP INDEX autoloadindex ON $(wp db prefix)options;"
Lenguaje del código: JavaScript (javascript)
option_name ya cubre consultas por una opción concreta; el índice compuesto no lo sustituye, lo complementa para cargas por autoload.option_value (suele ser LONGTEXT): no aporta en estos escenarios y encarece la tabla.LOCK=NONE.Con esto tendrás un camino sólido para acelerar wp_options y, por extensión, agilizar el dashboard y ciertas cargas del front.
