Można by pomyśleć, że to zapytanie wykonuje podzapytanie tylko raz, zachowuje wynik, a następnie porównuje go z wierszami w zapytaniu zewnętrznym. Ale tak nie jest w przypadku MySQL. MySQL ma lukę w inteligencji swojego optymalizatora, więc traktuje podzapytanie jako podzapytanie zależne i wykonuje go ponownie dla każdej odrębnej wartości zapytania zewnętrznego.
Aby to naprawić, przenieś podzapytanie do klauzuli FROM jako tabelę pochodną. Wykona podzapytanie raz i zachowa wynik jako wewnętrzną tabelę tymczasową. Następnie dołącz do drugiej instancji tabeli.
SELECT `ID`, `CountryCode`, `Name`, `District`, `Population`
FROM `City`
JOIN (
SELECT `CountryCode`, MAX(`Population`) AS `Population`
FROM `City`
GROUP BY `CountryCode`
) AS _max USING (`CountryCode`, `Population`);
Powinieneś także mieć indeks City nad dwiema kolumnami (CountryCode,Population)
w tej kolejności, aby zapytanie GROUP BY mogło działać wydajnie.