Creo que podria detallar esta imagen lo que dire a continuacion, esta imagen es un modelo de la arquitectura interna de un motor MySQL:
Algunos motores de MySQL poseen lo que se llama estadisticas de indices, que es una mini DB (imaginate una cache no reseteable
) que guarda los ultimos cambios realizados en la informacion de distribucion de indices (cuando digo ultimos cambios, la ultima vez que se ejecuto ANALYZE). Ahora, ya sabes lo de la estadisticas de indices porque existen? porque el Optimizador interno de MySQL junto al planificador (PARSER) utiliza una llamada API al motor de almacenamiento de una tabla en cuestion, para enterarse cuantos indices tiene dicha tabla, y de que manera pueden ser utilizados.
Ahora si dicha informacion no es la mas actualizada, el motor de almacenamiento podria retornar datos erroneos al optimizador de MySQL (informacion out of date ... como sea que se diga en espanol, se lo que es, pero me cuesta saber como se dira en espanol ) entonces el optimizador interno lo que hace es dar uso de la estadistica de indices generadas la ultima vez. Y si das uso de EXPLAIN como yo
podria este, estar retornandote mala referencia de como optimizar tu consulta porque esta basandose en registros con otra estructura o cambios en relacion a una tabla.
Si utilizas Linux imaginate que quieres actualizar el sistema operativo, lo actualizaste hace 20 dias atras pero tu quieres ver si de 20 dias atras a la fecha han liberado paquetes nuevos, entonces que haces??? actualizas primero la base de datos interna del repositorio con el comando 'update' o no??? Luego haces un 'upgrade' pero sino haces previamente 'update' tu base de datos de repositorios tendra paquetes acorde a hace 20 dias atras, el no sabra si se liberaron o no paquetes nuevos si tu no lo actualizas
eso mismo ocurre aqui.
Das uso de ANALYZE para actualizar esa informacion de estadisticas de indices al optimizador interno de MySQL. Cada cuanto tiempo hay que usarlo? pues cada vez que agregues 1 o mas indices a una o mas tablas, cada vez que elimines de forma masiva registros, o insertes de forma masiva, etc. Asi actualizas la info y el optimizador interno te ayudara de mejor manera a elegir consultas SQL perfectas para mantener optimizadas tus consultas.