Je ne suis pas un expert dans ce domaine, mais voici quelques réflexions :
La vitesse de requête prend plus de temps lorsque g.F2
les modifications sont dues à la mise en cache. MySQL enregistrera les résultats de chaque requête (jusqu'à ce que le cache soit plein), mais les nouvelles requêtes sont exécutées sur un cache vide, elles prennent donc plus de temps. Vous ne devriez pas optimiser sur cette base. (Voir Comment mesurer avec précision
)
Je ne peux pas dire à partir de vos informations si le g
ou gp
table a une plus grande spécificité (semble comme gp
?) dans le where
clause, mais vous pouvez essayer une sous-requête à la place. (Voir Comment forcer la requête interne à s'exécuter en premier
)
En ce qui concerne le profilage, il est possible que vous atteigniez un seuil physique comme le dépassement de l'allocation de RAM (l'utilisation de swap est désastreuse pour les performances) qui ne serait pas évident d'après explain
, ou si explain
est tout simplement faux dans ce cas.