मुझे पता है कि NewID() क्या करता है, मैं यह समझने की कोशिश कर रहा हूं कि यह यादृच्छिक चयन में कैसे मदद करेगा। क्या यह है कि (1) चयन कथन mytable से सब कुछ का चयन करेगा, (2) चयनित प्रत्येक के लिए, NewID() द्वारा उत्पन्न एक अद्वितीय पहचानकर्ता पर व्यवहार करें, (3) इस अद्वितीय पहचानकर्ता द्वारा पंक्तियों को क्रमबद्ध करें और (4) क्रमबद्ध सूची से शीर्ष 100 चुनें ?
हां। यह काफी हद तक सही है (सिवाय इसके कि सभी . को छांटने की आवश्यकता नहीं है पंक्तियाँ)। आप वास्तविक निष्पादन योजना को देखकर इसे सत्यापित कर सकते हैं।
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
कंप्यूट स्केलर ऑपरेटर NEWID()
जोड़ता है प्रत्येक पंक्ति के लिए कॉलम (मेरी उदाहरण क्वेरी में तालिका में 2506) तो तालिका में पंक्तियों को इस कॉलम द्वारा शीर्ष 100 चयनित के साथ क्रमबद्ध किया जाता है।
SQL सर्वर को वास्तव में पूरे सेट को 100 नीचे की स्थिति से सॉर्ट करने की आवश्यकता नहीं है, इसलिए यह एक TOP N
का उपयोग करता है सॉर्ट ऑपरेटर जो मेमोरी में संपूर्ण सॉर्ट ऑपरेशन करने का प्रयास करता है (N
. के छोटे मानों के लिए) )