Una consulta lenta, explicada con EXPLAIN.
Análisis de filtros y ordenación en una consulta Doctrine sobre MySQL.
Contexto
Consulta de últimas publicaciones con filtros de visibilidad, roles y relaciones asociadas.
Problema
Un EXPLAIN ANALYZE mostró aproximadamente 252 ms para devolver tres registros. El plan incluía filtrado, joins y ordenación por created_at e id.
Intervención
Revisión de filtros de roles, uso de JSON_CONTAINS y adición de índices. Inspección del plan para localizar el coste de la ordenación y la selección.
Se analiza la selectividad de cada filtro y si el índice ayuda también al orden requerido. Una consulta que devuelve pocos registros puede examinar miles antes de ordenar; añadir un índice no implica que el optimizador vaya a usarlo ni que desaparezca el coste de los joins.
Resultado observado
Se documentó el plan de ejecución y la persistencia de la ordenación como punto de análisis. No se dispone de una medición final comparable para publicar una mejora porcentual.
Límites y siguiente paso
El siguiente paso es comparar planes y latencias con los mismos datos y carga. El rendimiento depende de la distribución de datos y del patrón de acceso.
El protocolo de comparación debe conservar el mismo conjunto de datos, parámetros, estado de caché y concurrencia. Además del tiempo total se revisan filas examinadas, tipo de acceso, ordenación y coste de escritura de los nuevos índices.