में बहुत बड़ी तालिकाओं का अद्यतन या मेर्ज मुझे एक बहुत बड़े (300 एम रिकॉर्ड) और विस्तृत TABLE1
का दैनिक अपडेट करने की आवश्यकता है। अद्यतनों के लिए स्रोत डेटा किसी अन्य तालिका UTABLE
में स्थित है जो TABLE1
की पंक्तियों में 10% -25% है लेकिन यह संकीर्ण है। दोनों तालिकाओं में प्राथमिक कुंजी के रूप में record_id
है।SQL सर्वर
वर्तमान में, मैं TABLE1
निम्नलिखित दृष्टिकोण का उपयोग कर पुनः हूँ:
<!-- language: sql -->
1) SELECT (required columns) INTO TMP_TABLE1
FROM TABLE1 T join UTABLE U on T.record_id=U.record_id
2) DROP TABLE TABLE1
3) sp_rename 'TMP_TABLE1', 'TABLE1'
हालांकि इस अपने सर्वर (SQL सर्वर के लिए रैम 60GB) पर लगभग 40 मिनट लगते हैं। मैं 50% प्रदर्शन लाभ प्राप्त करना चाहता हूं - मैं अन्य विकल्पों का प्रयास कैसे कर सकता हूं?
MERGE
औरUPDATE
- तरह नीचे कोड तेजी से केवल एक बहुत छोटाUTABLE
तालिका के लिए काम करता है कुछ - पूर्ण आकार में, सब कुछ सिर्फ लटकी हुई है:<!-- language: SQL --> MERGE TABLE1 as target USING UTABLE as source ON target.record_id = source.record_id WHEN MATCHED THEN UPDATE SET Target.columns=source.columns
मैंने सुना है कि मैं एक बैच प्रदर्शन कर सकते हैं ROWCOUNT का उपयोग करके मेर्ज - लेकिन मुझे नहीं लगता कि यह 300 एम पंक्ति तालिका के लिए पर्याप्त तेज़ हो सकता है।
कोई भी SQL क्वेरी संकेत जो मददगार हो सकता है?
के दौरान इंडेक्स का पुनर्निर्माण करने के लिए अतिरिक्त कार्य होगा, क्या आप क्वेरी प्लान पोस्ट कर सकते हैं? –
हाय @ क्रिस, क्वेरी प्लान मृत सरल है: ** 1 ** टेबल स्कैन टैबलेट 1, ** 2 ** टेबल स्कैन यूटबल, ** 3 ** हैश जॉइन, ** 4 ** मेर्ज। पहला और अंतिम चरण 90% समय ले रहा है। हालांकि मैं पहले ही समझ चुका हूं कि मेरे प्रश्न को कैसे हल किया जाए - कृपया मेरा अपना जवाब देखें। –