Du skulle kunna tro att den här frågan bara kör underfrågan en gång, behåller resultatet och sedan jämför den med rader i den yttre frågan. Men så är det inte med MySQL. MySQL har en lucka i sin optimerares intelligens, så den behandlar underfrågan som en beroende underfråga och kör den igen för varje distinkt värde i den yttre frågan.
För att åtgärda detta, flytta underfrågan till FROM-satsen som en härledd tabell. Den kommer att köra underfrågan en gång och behålla resultatet som en intern temporär tabell. Gå sedan med i den andra instansen av tabellen.
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`);
Du bör också ha ett index på Stad över de två kolumnerna (CountryCode,Population)
i den ordningen, så att GROUP BY-frågan kan köras effektivt.