Consultas SQL lentas de tipo "SELECT SQL_CALC_FOUND_ROWS"

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.