ठीक है,100k पंक्तियाँ, एक यादृच्छिक क्रम में वापस किया गया एक एसक्यूएल समय के बिना बाहर कृपया
मैं एक यादृच्छिक पंक्ति पिछले साल सेट लौटने पर पढ़ने का एक बहुत कुछ कर रहा हूँ, और समाधान हम साथ आया
थाORDER BY newid()
यह < 5k पंक्तियों के लिए ठीक है। लेकिन जब हमें मिल रहा है> 10-20k पंक्तियां हमें एसक्यूएल टाइम आउट मिल रही हैं, निष्पादन योजना ने मुझे बताया कि मेरी क्वेरी लागत का 76% इस लाइन से आता है। और जब हम बड़ी मात्रा में पंक्तियां रखते हैं तो इस रेखा को हटाने से परिमाण के क्रम से गति बढ़ जाती है।
हमारे उपयोगकर्ताओं को इस तरह के समय में 100k पंक्तियों तक करने की आवश्यकता है।
आपको कुछ और विवरण देने के लिए।
हमारे पास 2.6 मिलियन 4 अंकों अल्फा-न्यूमेरिक कोड वाली एक तालिका है। हम किसी स्थान पर प्रवेश प्राप्त करने के लिए इनमें से एक यादृच्छिक सेट का उपयोग करते हैं। उदाहरण के लिए, यदि हमारे पास 5000 क्षमता वाला कोई ईवेंट है, तो इनमें से 5000 का एक यादृच्छिक सेट तालिका से खींचा जाएगा, फिर प्रत्येक ग्राहक को बार-कोड के रूप में जारी किया जाएगा, फिर दरवाजे पर बार-कोड स्कैनिंग ऐप होगा 5000 की एक ही सूची। 4 अंकों वाले अल्फा न्यूमेरिक कोड (और एक GUID की तरह बेवकूफ लंबी संख्या नहीं) का उपयोग करने का कारण यह है कि लोगों के लिए संख्या लिखना आसान है (या किसी मित्र को एसएमएस करें) और बस इसे लाएं संख्या और इसे मैन्युअल रूप से दर्ज किया है, इसलिए हम बड़ी संख्या में वर्ण नहीं चाहते हैं। ग्राहक अंतिम बिट बीटीडब्ल्यू प्यार करते हैं।
ORDER BY newid()
से बेहतर तरीका है, या 2.6 मिलियन के साथ तालिका से 100k यादृच्छिक पंक्तियां प्राप्त करने का एक तेज़ तरीका है?
ओह, और हम एमएस एसक्यूएल उपयोग कर रहे हैं 2005
धन्यवाद,
जो
यहां एक दिलचस्प पढ़ा गया है: http://www.sqlteam.com/article/returning-rows-in-random-order-part-ii-revenge-of-the-randomizer –