जबकि "रैंड () द्वारा फास्ट ऑर्डर" जैसी कोई चीज नहीं है, आपके विशिष्ट कार्य के लिए एक समाधान है।
कोई भी यादृच्छिक पंक्ति प्राप्त करने के लिए , आप ऐसा कर सकते हैं जैसे यह जर्मन ब्लॉगर करता है:http://web.archive.org/web/20200211210404/http://www.roberthartung.de/mysql-order-by-rand-a- केस-स्टडी-ऑफ़-विकल्प/ (मैं एक हॉटलिंक यूआरएल नहीं देख सका। अगर कोई एक देखता है, तो लिंक को संपादित करने में संकोच न करें।)
टेक्स्ट जर्मन में है, लेकिन SQL कोड पेज से थोड़ा नीचे और बड़े सफेद बॉक्स में है, इसलिए इसे देखना मुश्किल नहीं है।
मूल रूप से वह जो करता है वह एक ऐसी प्रक्रिया करता है जो वैध पंक्ति प्राप्त करने का काम करता है। यह 0 और max_id के बीच एक यादृच्छिक संख्या उत्पन्न करता है, एक पंक्ति लाने का प्रयास करें, और यदि यह अस्तित्व में नहीं है, तब तक चलते रहें जब तक कि आप एक को हिट न करें। वह एक अस्थायी तालिका में संग्रहीत करके यादृच्छिक पंक्तियों की x संख्या लाने की अनुमति देता है, इसलिए आप शायद प्रक्रिया को फिर से लिख सकते हैं ताकि केवल एक पंक्ति को थोड़ा तेज किया जा सके।
इसका नकारात्मक पक्ष यह है कि यदि आप बहुत सी पंक्तियों को हटाते हैं, और बहुत बड़े अंतराल हैं, तो संभावना है कि यह कई बार चूक जाएगा, जिससे यह अप्रभावी हो जाएगा।
अपडेट:अलग-अलग निष्पादन समय
इसे अनुक्रमण के साथ करना पड़ सकता है। id
username
adding जोड़ते समय अनुक्रमित और त्वरित पहुंच है परिणाम के लिए, इसका मतलब है कि इसे प्रत्येक पंक्ति से पढ़ना होगा और इसे मेमोरी टेबल में रखना होगा। *
के साथ इसे स्मृति में सब कुछ पढ़ना भी है, लेकिन इसे डेटा फ़ाइल के चारों ओर कूदने की आवश्यकता नहीं है, जिसका अर्थ है कि समय की तलाश नहीं है।
इससे केवल तभी फर्क पड़ता है जब चर लंबाई के कॉलम (वर्कर/टेक्स्ट) हों, जिसका अर्थ है कि इसे लंबाई की जांच करनी है, फिर उस लंबाई को छोड़ दें, जैसा कि प्रत्येक पंक्ति के बीच एक निर्धारित लंबाई (या 0) को छोड़ने के विपरीत है।