वास्तव में मुझे ऐसे प्रश्नों के लिए सामान्य अनुशंसाएँ मिली हैं:SQL मर्ज या अपडेट का उपयोग करने का विचार बहुत ही चतुर है लेकिन यह तब विफल हो जाता है जब हमें कई रिकॉर्ड अपडेट करने की आवश्यकता होती है (यानी 75M ) एक बड़ी और चौड़ी टेबल में (यानी 240M )
नीचे दी गई क्वेरी की क्वेरी योजना को देखते हुए हम कह सकते हैं कि TABLE SCAN
TABLE1 का और अंतिम MERGE
90% समय ले रहे हैं।
MERGE TABLE1 as Target
USING UTABLE as source
ON Target.record_id = source.record_id
WHEN MATCHED AND (condition) THEN
UPDATE SET Target.columns=source.columns
इसलिए MERGE का उपयोग करने के लिए हमें यह करना होगा:
- उन पंक्तियों की संख्या कम करें जिन्हें हमें अद्यतन करने की आवश्यकता है और इस जानकारी को SQL सर्वर को सही ढंग से पास करें। यह
UTABLE
. बनाकर किया जा सकता है छोटा या अतिरिक्त निर्दिष्ट करनाcondition
जो विलय के लिए अंश को संकुचित करता है। - सुनिश्चित करें कि मर्ज किया जाने वाला हिस्सा मेमोरी में फिट बैठता है अन्यथा क्वेरी धीमी गति से चलती है।
TABLE1
बनाना मेरे वास्तविक क्वेरी समय को दो बार कम करके 11 घंटे से 40 मिनट कर दिया।
जैसा कि मार्क ने उल्लेख किया है कि आप UPDATE
. का उपयोग कर सकते हैं सिंटैक्स और WHERE
. का उपयोग करें विलय करने के लिए संकीर्ण भाग के खंड - यह वही परिणाम देगा। इसके अलावा कृपया TABLE1
को अनुक्रमित करने से बचें क्योंकि इससे MERGE
. के दौरान अनुक्रमणिका के पुनर्निर्माण के लिए अतिरिक्त कार्य होगा