Depurando problemas de lentitud nos encontramos de forma frecuente con consultas SQL extremadamente lentas, similares a las siguientes:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) ...
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 ...
Estas consultas tienen la finalidad de obtener un total de resultados para una búsqueda delimitada, involucrando principalmente a dos tablas posts
y postmeta
.
Con el crecimiento natural de datos de estas tablas, estas consultas tienden a tener un peor rendimiento, ocasionando que se produzca un cuello de botella en WordPress, haciendo que sea más lento
La solución pasaría por crear un índice, es en cierto modo una guía ya preparada que permite a MySQL encontrar resultados de forma muy eficiente sin tener que ir buscando fila a fila.
Para crear el índice, accede a cPanel, sección phpMyAdmin, entra en la base de datos en cuestión y en la pestaña SQL introduce y ejecuta la siguiente consulta:
CREATE INDEX post_id_meta_key ON wp_postmeta (post_id, meta_key(191));
Si nuestra tabla postmeta
tiene un prefijo diferente a wp_
, sustituimos wp_postmeta
por el nombre correspondiente.
Con esta acción tendríamos creado el índice y volveríamos a tener un rendimiento óptimo en estas consultas SQL problemáticas.