Síntomas del problema
El equipo de operaciones de un retailer con 5 tiendas en Perú reportaba que el sistema de inventario tardaba entre 8 y 12 segundos en cargar cada consulta. Durante los cierres de caja y el inventario de fin de mes, el sistema simplemente se colgaba. La base de datos MySQL tenía 4 años de datos acumulados sin ningún proceso de mantenimiento o revisión de índices.
Diagnóstico técnico
Nuestro equipo realizó un análisis de slow query log durante 72 horas de operación real. Identificamos 12 consultas críticas que representaban el 78% del tiempo total de espera. Los problemas principales: ausencia de índices compuestos en las tablas de mayor acceso, consultas con full table scan sobre tablas de más de 2 millones de registros, y joins sin optimizar que generaban productos cartesianos innecesarios.
Las intervenciones realizadas
Rediseñamos la estrategia de indexación: creamos 8 índices compuestos nuevos y eliminamos 14 índices redundantes que ralentizaban las escrituras. Reescribimos las 12 consultas críticas con subqueries optimizados y uso correcto de EXPLAIN. Implementamos Redis como capa de caché para los reportes más frecuentes. Configuramos el buffer pool de InnoDB según el hardware disponible.
Resultados medibles
Las consultas de inventario bajaron de 12 segundos a 1.8 segundos de promedio (reducción del 85%). Los cierres de caja que tardaban 20 minutos ahora se completan en menos de 3 minutos. El servidor MySQL pasó de un uso de CPU del 87% al 23% en horario pico. El cliente evitó una migración de hardware que estimaba en S/. 45,000, resolviendo el problema con optimización de software.
Temas