आपको लगता है कि यह क्वेरी केवल एक बार सबक्वेरी निष्पादित करती है, परिणाम रखती है, और फिर इसकी तुलना बाहरी क्वेरी में पंक्तियों से करती है। लेकिन MySQL के साथ ऐसा नहीं है। MySQL के पास अपने अनुकूलक की बुद्धि में एक अंतर है, इसलिए यह सबक्वेरी को आश्रित सबक्वायरी के रूप में मानता है और बाहरी क्वेरी के प्रत्येक विशिष्ट मान के लिए इसे फिर से निष्पादित करता है।
इसे ठीक करने के लिए, सबक्वेरी को FROM क्लॉज में एक व्युत्पन्न तालिका के रूप में ले जाएँ। यह एक बार सबक्वायरी निष्पादित करेगा, और परिणाम को आंतरिक अस्थायी तालिका के रूप में रखेगा। फिर तालिका के दूसरे उदाहरण में शामिल हों।
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`);
इसके अलावा आपके पास शहर पर दो कॉलम (CountryCode,Population)
. पर एक इंडेक्स होना चाहिए उस क्रम में, ताकि ग्रुप बाय क्वेरी कुशलता से चल सके।