Rendimiento y monitorización

Consultas SQL lentas de tipo "SELECT SQL_CALC_FOUND_ROWS"

Publicado el · wordpress · rendimiento · base de datos

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.

También te puede ayudar

  1. Consultas SQL para limpiar datos huérfanos y purgar la base de datos de WordPress
  2. Lentitud de rendimiento consultas SQL usando LEFT JOIN
  3. Mejora del rendimiento de la base de datos de WordPress con Index WP MySQL For Speed
  4. Optimizar la tabla wp_options y los datos de tipo "autoload"