असल में...मैंने एक परीक्षा समाप्त की और मैंने शायद अपने ही प्रश्न का उत्तर दे दिया होता। मैंने सोचा कि अगर यह किसी और के लिए उपयोगी हो तो मैं इस जानकारी को यहां पोस्ट करूंगा। (अगर मैंने यहां कुछ गलत किया है, तो कृपया मुझे बताएं!)
यह एक तरह से आश्चर्यजनक है...
मैंने जो कुछ भी पढ़ा है, उसके विपरीत, मैंने टेस्टडाटा नामक एक तालिका बनाई जिसमें 1 मिलियन पंक्तियां थीं और निम्न क्वेरी चलाई:
चुनें * टेस्टडाटा से जहां नंबर =41 रैंड द्वारा ऑर्डर () LIMIT 8
... और इसने पंक्तियों को औसतन 0.0070 सेकंड में लौटा दिया। मैं वास्तव में नहीं देखता कि रैंड() की इतनी खराब प्रतिष्ठा क्यों है। यह मेरे लिए बहुत उपयोगी लगता है, कम से कम इस विशेष स्थिति में।
मेरी टेबल में तीन कॉलम हैं:
आईडी [बिगिनट(20)] | टेक्स्टफील्ड [टिनीटेक्स्ट] | नंबर [बिगिनट(20)]
आईडी पर प्राथमिक कुंजी, संख्या पर अनुक्रमणिका।
मुझे लगता है कि MySQL यह जानने के लिए काफी स्मार्ट है कि इसे केवल 20 पंक्तियों में RAND() लागू करना चाहिए जो "WHERE number =41" द्वारा लौटाए जाते हैं? (मैंने विशेष रूप से केवल 20 पंक्तियाँ जोड़ी हैं जिनका 'नंबर' के लिए मान 41 था।)
वैकल्पिक सबक्वेरी विधि लगभग .0080 सेकंड के औसत समय के साथ परिणाम लौटाती है, जो गैर-सबक्वायरी विधि की तुलना में धीमी है।
सबक्वेरी विधि:चुनें * से (चुनें * टेस्टडेटा से जहां संख्या =41) टी ऑर्डर द्वारा रैंड() LIMIT 8