Nie jestem ekspertem w tej dziedzinie, ale oto kilka przemyśleń:
Szybkość zapytania trwa dłużej, gdy g.F2
zmiany wynikają z buforowania. MySQL zapisze wyniki dla każdego zapytania (aż do zapełnienia pamięci podręcznej), ale nowe zapytania są uruchamiane na pustej pamięci podręcznej, więc trwają dłużej. Nie powinieneś na tej podstawie optymalizować. (Zobacz Jak dokładnie mierzyć
)
Na podstawie twoich informacji nie mogę stwierdzić, czy g
lub gp
tabela ma większą szczegółowość (wygląda na to, że gp
?) w where
klauzula, ale możesz zamiast tego spróbować podzapytania. (Zobacz Jak zmusić wewnętrzne zapytanie do wykonania jako pierwsze
)
Jeśli chodzi o profilowanie, możliwe, że osiągasz fizyczny próg, taki jak przekroczenie alokacji pamięci RAM (używanie wymiany jest katastrofalne dla wydajności), co nie byłoby oczywiste z explain
, czy też explain
jest po prostu źle w tym przypadku.