आप सही कह रहे हैं, यह WHERE, GROUP BY, और HAVING के साथ पंक्तियों की संख्या को कम करने के बाद ORDER BY लागू करेगा। लेकिन यह LIMIT से पहले ORDER BY लागू होगा।
इसलिए यदि आप पंक्तियों की संख्या को पर्याप्त रूप से फ़िल्टर करते हैं, तो हाँ, रैंड द्वारा ऑर्डर () एक महान प्रदर्शन प्रभाव के बिना आप जो चाहते हैं उसे प्राप्त कर सकते हैं। कोड का एक वैध लाभ है जो सरल और आसानी से पठनीय है।
मुसीबत तब आती है जब आप सोचते हैं आपकी क्वेरी को पंक्तियों को कुछ छोटा कर देना चाहिए, लेकिन समय के साथ जैसे-जैसे आपका डेटा बढ़ता है, पंक्तियों की संख्या को क्रमबद्ध करने की आवश्यकता फिर से बड़ी हो जाती है। चूंकि आपकी क्वेरी तब क्रमबद्ध परिणाम पर LIMIT 10 इस तथ्य को छुपाती है कि आप 500k पंक्तियों पर ORDER BY RAND() कर रहे हैं। आप देखते हैं कि प्रदर्शन रहस्यमय तरीके से खराब होता जा रहा है।
मैंने अपनी पुस्तक SQL Antipatterns:में यादृच्छिक पंक्ति चुनने के वैकल्पिक तरीकों के बारे में लिखा है। डेटाबेस प्रोग्रामिंग के नुकसान , या अन्य उत्तरों में यहाँ स्टैक ओवरफ़्लो पर:
- MySQL के साथ रैंडम पंक्तियों का चयन करना
- बड़े डेटासेट को रैंडमाइज़ करना
- mysql में एक बड़ी तालिका से एक यादृच्छिक पंक्ति का त्वरित चयन