(ORDER BY
. के नुकसान की व्याख्या करते हुए )
SQL मानक अनिवार्य रूप से कहता है कि एक सबक्वेरी पंक्तियों का एक अनियंत्रित सेट है। इसका तात्पर्य यह है कि अनुकूलक ORDER BY
. को अनदेखा करने के लिए स्वतंत्र है 'व्युत्पन्न' तालिका में:FROM ( SELECT ... ORDER BY )
. MySQL और MariaDB के "हाल के" संस्करणों में, ऐसे ORDER BYs
गिराए जा रहे हैं। ऐसे और भी मामले हैं जहां ORDER BY
अनदेखा किया जाता है।
कुछ . में स्थितियाँ (इस बारे में निश्चित नहीं), एक LIMIT 99999999
adding जोड़ना (बड़ी संख्या) ORDER BY
. के बाद ऑप्टिमाइज़र को ORDER BY
. करने के लिए चकमा देता है . हालांकि, बाद में "आदेश" को अनदेखा करना अभी भी मुफ़्त है।
MySQL के लिए एक सामान्य नियम:सबक्वेरी से बचें। (ऐसे मामले हैं जहां सबक्वेरी तेज हैं, लेकिन आपकी नहीं।)
एक मजबूत नियम:आपको जरूरी एक ORDER BY
यदि आप परिणामों को क्रमबद्ध करना चाहते हैं तो सबसे बाहरी पर।
अगर आपने LIMIT 3
जोड़ा होता आपकी पहली क्वेरी में व्युत्पन्न तालिका में, आपको केवल चार्ल्स, डेविड, जेम्स, मिलेगा लेकिन जरूरी नहीं कि उसी क्रम में हो . यानी, आपको दो ORDER BYs
. की आवश्यकता होगी - एक व्युत्पन्न तालिका में, एक बहुत अंत में।