वास्तव में यादृच्छिक रिकॉर्ड प्राप्त करना धीमा हो सकता है। इस तथ्य के आसपास वास्तव में बहुत कुछ नहीं हो रहा है; यदि आप चाहते हैं कि यह वास्तव में यादृच्छिक हो, तो क्वेरी को सभी प्रासंगिक डेटा को लोड करना होगा ताकि यह पता चल सके कि उसे कौन से रिकॉर्ड चुनना है।
सौभाग्य से हालांकि, इसे करने के तेज तरीके हैं। वे ठीक से यादृच्छिक नहीं हैं, लेकिन यदि आप गति के लिए कुछ शुद्ध यादृच्छिकता का व्यापार करने में प्रसन्न हैं, तो वे अधिकांश उद्देश्यों के लिए पर्याप्त होना चाहिए।
इसे ध्यान में रखते हुए, "यादृच्छिक" रिकॉर्ड प्राप्त करने का सबसे तेज़ तरीका आपके डीबी में एक अतिरिक्त कॉलम जोड़ना है, जो एक यादृच्छिक मान से भरा हुआ है। शायद प्राथमिक कुंजी का नमकीन MD5 हैश? जो कुछ। इस कॉलम पर उपयुक्त इंडेक्स जोड़ें, और फिर बस अपने ORDER BY
. में कॉलम जोड़ें क्वेरी में क्लॉज, और आप अपने रिकॉर्ड्स को एक यादृच्छिक क्रम में वापस प्राप्त करेंगे।
एक यादृच्छिक रिकॉर्ड प्राप्त करने के लिए, बस LIMIT 1
निर्दिष्ट करें और एक WHERE random_field > $random_value
. जोड़ें जहां यादृच्छिक मान आपके नए क्षेत्र की श्रेणी में एक मान होगा (उदाहरण के लिए, यादृच्छिक संख्या का MD5 हैश कहें)।
बेशक यहाँ नीचे की ओर यह है कि यद्यपि आपके रिकॉर्ड एक यादृच्छिक क्रम में होंगे, वे उसी यादृच्छिक क्रम में अटके रहेंगे। मैंने कहा था कि यह क्वेरी गति के लिए पूर्णता का व्यापार कर रहा था। आप इसे समय-समय पर नए मूल्यों के साथ अपडेट करके इसे प्राप्त कर सकते हैं, लेकिन मुझे लगता है कि अगर आपको इसे ताज़ा रखने की आवश्यकता है तो यह आपके लिए एक समस्या हो सकती है।
दूसरी तरफ यह है कि एक अतिरिक्त कॉलम जोड़ना यह पूछने के लिए बहुत अधिक हो सकता है कि क्या आपके पास भंडारण की कमी है और आपका डीबी पहले से ही आकार में बड़ा है, या यदि आपके पास कॉलम जोड़ने से पहले अतीत में जाने के लिए सख्त डीबीए है। लेकिन फिर, आपको कुछ व्यापार करना होगा; यदि आप क्वेरी गति चाहते हैं, तो आपको इस अतिरिक्त कॉलम की आवश्यकता होगी।
वैसे भी, मुझे आशा है कि इससे मदद मिली।