Rendimiento y monitorización
Consultas SQL lentas de tipo "SELECT SQL_CALC_FOUND_ROWS"
Al investigar lentitud en WordPress puedes encontrar consultas con esta estructura:
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 ...
Los fragmentos anteriores son ilustrativos, no consultas completas para ejecutar. SQL_CALC_FOUND_ROWS permite calcular el total que coincide con los filtros aunque la consulta devuelva solo una página de resultados. Puede aparecer con distintas tablas, no exclusivamente posts y postmeta.
Al crecer las tablas, una consulta que examina demasiadas filas puede tardar más y convertirse en un cuello de botella. El efecto depende de los datos y del plan de ejecución.
La presencia de SQL_CALC_FOUND_ROWS no identifica por sí sola la causa. El coste puede depender de los filtros, un JOIN sobre metadatos, el volumen de resultados, el orden aplicado o los índices que ya existan. Localiza primero el plugin, tema o petición que genera la consulta mediante PHP X-Ray.
Antes de crear un índice, guarda una copia recuperable y ejecuta EXPLAIN sobre la consulta completa. Comprueba también los índices actuales de la tabla:
SHOW INDEX FROM wp_postmeta;
Un índice combinado como (post_id, meta_key) puede ayudar a determinados planes de ejecución, pero no es una solución universal y añade coste a cada escritura. Si el análisis confirma que falta, utiliza una herramienta mantenida como Index WP MySQL For Speed o pide al desarrollador que diseñe y pruebe el índice sobre un clon.
Después del cambio, repite EXPLAIN, compara el tiempo con varias ejecuciones y verifica inserciones, búsquedas, administración y tareas programadas. Revierte el índice si no mejora el plan o penaliza otras operaciones.
Si el código no necesita paginación
En una consulta propia construida con WP_Query, el desarrollador puede evaluar no_found_rows => true cuando no se utiliza el total ni el número de páginas. No lo apliques globalmente: rompería funciones que sí dependen de esos valores. La referencia de WP_Query describe el parámetro.
Revisa también filtros, orden y número de resultados solicitados. No edites el núcleo de WordPress ni elimines la cláusula de una consulta generada solo porque aparezca en el informe. La validación debe comprobar resultados y paginación, además del tiempo.
También te puede ayudar
- Diagnosticar consultas LEFT JOIN lentas en WordPress Analiza consultas de taxonomías lentas con LEFT JOIN, compara planes y alternativas en una copia y e...
- Mejora del rendimiento de la base de datos de WordPress con Index WP MySQL For Speed Evalúa índices de WordPress con Index WP MySQL For Speed, revisa los cambios antes de aplicarlos y c...
- Optimizar la tabla wp_options y los datos de tipo "autoload" Mide y reduce los datos autoload de wp_options, localiza opciones grandes, cron, transitorios y sesi...
- Cómo cargar el script de reCAPTCHA con Contact Form 7 solo donde sea necesario Evalúa el coste de reCAPTCHA en Contact Form 7 y limita su carga solo tras identificar todos los for...
¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.