कुछ परीक्षण तालिका पर मेरी ओर से आपकी मूल योजना इस प्रकार दिखती है।
यह केवल एक बार परिणाम की गणना करता है और इसे एक स्पोल में कैश करता है और फिर उस परिणाम को फिर से चलाता है। आप निम्न कोशिश कर सकते हैं ताकि SQL सर्वर सबक्वेरी को सहसंबद्ध के रूप में देखे और प्रत्येक बाहरी पंक्ति के लिए पुनर्मूल्यांकन की आवश्यकता हो।
UPDATE table1
SET table2Id = (SELECT TOP 1 table2Id
FROM table2
ORDER BY Newid(),
table1.table1Id)
मेरे लिए जो बिना स्पूल के यह प्लान देता है।
table1
. से एक अद्वितीय फ़ील्ड पर सहसंबद्ध होना महत्वपूर्ण है हालाँकि, भले ही एक स्पूल जोड़ा गया हो, यह हमेशा रिवाउंड (अंतिम परिणाम को फिर से चलाने) के बजाय रिबाउंड होना चाहिए क्योंकि प्रत्येक पंक्ति के लिए सहसंबंध मान अलग होगा।
यदि टेबल बड़े हैं तो यह धीमा हो जाएगा क्योंकि आवश्यक कार्य दो टेबल की पंक्तियों का एक उत्पाद है (table1
में प्रत्येक पंक्ति के लिए) इसे table2
. का पूरा स्कैन करने की आवश्यकता है )