क्या SQL सर्वर तालिका से यादृच्छिक रिकॉर्ड पुनर्प्राप्त करने का कोई संक्षिप्त तरीका है?
हाँ
SELECT TOP 1 * FROM table ORDER BY NEWID()
स्पष्टीकरण
एक NEWID()
प्रत्येक पंक्ति के लिए उत्पन्न होता है और उसके बाद तालिका को क्रमबद्ध किया जाता है। पहला रिकॉर्ड लौटाया जाता है (यानी "सबसे कम" GUID वाला रिकॉर्ड)।
नोट
-
GUID चार संस्करण के बाद से छद्म यादृच्छिक संख्या के रूप में उत्पन्न होते हैं:
<ब्लॉकक्वॉट>संस्करण 4 यूयूआईडी वास्तव में-यादृच्छिक या छद्म-यादृच्छिक संख्याओं से यूयूआईडी उत्पन्न करने के लिए है।
एल्गोरिथ्म इस प्रकार है:
- theclock_seq_hi_and_reserved के दो सबसे महत्वपूर्ण बिट्स (बिट्स 6 और 7) को क्रमशः शून्य और एक पर सेट करें।
- thetime_hi_and_version फ़ील्ड के चार सबसे महत्वपूर्ण बिट्स (बिट्स 12 से 15) को सेक्शन 4.1.3 से 4-बिट वर्जन नंबर पर सेट करें।
- अन्य सभी बिट्स को यादृच्छिक रूप से (या छद्म-यादृच्छिक रूप से) चुने गए मानों पर सेट करें।
—एक यूनिवर्सली यूनिक आइडेंटिफ़ायर (UUID) URN नेमस्पेस - RFC 4122
-
वैकल्पिक
SELECT TOP 1 * FROM table ORDER BY RAND()
जैसा कोई सोचेगा वैसा काम नहीं करेगा।RAND()
प्रति क्वेरी एक एकल मान लौटाता है, इस प्रकार सभी पंक्तियां समान मान साझा करेंगी। -
जबकि GUID मान छद्म यादृच्छिक हैं, आपको अधिक मांग वाले अनुप्रयोगों के लिए बेहतर PRNG की आवश्यकता होगी।
-
लगभग 1,000,000 पंक्तियों के लिए विशिष्ट प्रदर्शन 10 सेकंड से कम है - निश्चित रूप से सिस्टम पर निर्भर करता है। ध्यान दें कि किसी इंडेक्स को हिट करना असंभव है, इस प्रकार प्रदर्शन अपेक्षाकृत सीमित होगा।