Bạn sẽ nghĩ rằng truy vấn này chỉ thực thi truy vấn con một lần, giữ kết quả, sau đó so sánh nó với các hàng trong truy vấn bên ngoài. Nhưng đó không phải là trường hợp của MySQL. MySQL có một lỗ hổng trong trí thông minh của trình tối ưu hóa của nó, vì vậy nó xử lý truy vấn con như một truy vấn con phụ thuộc và thực thi lại nó cho từng giá trị riêng biệt của truy vấn bên ngoài.
Để khắc phục điều này, hãy chuyển truy vấn con vào mệnh đề FROM dưới dạng bảng dẫn xuất. Nó sẽ thực hiện truy vấn con một lần và giữ kết quả dưới dạng bảng tạm thời bên trong. Sau đó, tham gia vào phiên bản khác của bảng.
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`);
Ngoài ra, bạn nên có một chỉ mục về Thành phố trên hai cột (CountryCode,Population)
theo thứ tự đó, để truy vấn GROUP BY có thể chạy hiệu quả.