यकीन के लिए आप MySQL
तरफ करना चाहिए।
लेकिन ध्यान दें कि ORDER BY RAND()
MySQL
में बहुत अक्षम है क्योंकि यह filesort
की आवश्यकता है।
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 10
FROM t_random
) vars
STRAIGHT_JOIN
(
SELECT r.*,
@lim := @lim - 1
FROM t_random r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim/@cnt
) i
प्रदर्शन जानकारी के लिए अपने ब्लॉग में इस लेख देखें::
एक के लिए
एक एकल तालिका स्कैन के साथ कुशलता से 10
यादृच्छिक पंक्तियों का चयन करने का तरीका देखें 1,000,000
रिकॉर्ड तालिका, यह 15
सेकेंड के बजाय एक सेकंड से भी कम समय में चलता है डीएस ORDER BY RAND()
का उपयोग कर।
मैं यह दिखाने के लिए परीक्षण करता हूं कि इसके बारे में चिंता करने से पहले कोई समस्या मौजूद है या नहीं। इससे पहले कि इससे कोई फर्क नहीं पड़ता, आपके पास बहुत बड़ी मात्रा में डेटा होना चाहिए, मुझे उम्मीद है। वास्तव में, यह एक पोस्ट चुनने, इसे कार्यान्वित करने, स्विच करने और तुलना करने के बजाय, इसे पोस्ट करने और जवाब पचाने की मात्रा की तुलना करना दिलचस्प होगा। (बस अटकलें, आलोचना नहीं; हम सभी इन मानसिक अभ्यास करते हैं।) – dkretz
हाँ, लेकिन अगर कोई इस सवाल का जवाब देता है, तो मैं समय के इस निवेश के बिना सीखूंगा, और मैं और अन्य अपना कोड सुधार सकते हैं। मुझे लगता है कि यह एक सवाल है कि इस पर ध्यान दिए बिना कि कोई समस्या वर्तमान में मौजूद है या नहीं। – nickf