हमारे पास हमारे डेटाबेस में एक संग्रहीत प्रोसेडर है जो एक शर्त के साथ 30 कॉलम पर 2 टेबल में शामिल होकर एक तालिका अपडेट करता है। एसक्यूएल सामान्य प्रारूप में है:कई कॉलम अपडेट-कई-आईएसएनयूएलएल के साथ जुड़ने में काफी समय लगता है?
UPDATE Target
SET col1 = Source.col1
INNER JOIN Source
on
ISNULL(Target.Col2, '') = ISNULL(Source.Col2, '') and
ISNULL(Target.Col3, '') = ISNULL(Source.Col3, '') and
.
.
.
ISNULL(Target.Col31, '') = ISNULL(Source.Col31, '') and
यहां प्रश्न योजना है। इसे अपने पीसी पर सहेजें और इसे फिर से खोलें ताकि यह बेहतर हो सके।
स्रोत तालिका 65m रिकॉर्ड, लक्ष्य 165m है। पहले यह काफी कुछ मिनटों में चलाने के लिए प्रयोग किया जाता था। इस सवाल को ध्यान में रखते हुए कि कितनी बदसूरत और संभावित रूप से अक्षम है, मुझे यह आश्चर्यजनक लगता है। इस महीने यह 1.5 घंटे तक चला, प्रोसेसर का 100% इस्तेमाल किया और हमें इसे मारना पड़ा।
कोई सुझाव नीचे दिए गए प्रश्न को कैसे सुधारें और इसे समय पर कैसे चलाएं ..?
हमारे पास 30-कॉलम स्थिति में उपयोग किए गए कुछ कॉलम पर एकल कॉलम इंडेक्स हैं।
मुझे ISNULL फ़ंक्शन पता है और 30 कॉलम पर शामिल होना पागल है और यह एक खराब डिज़ाइन है। मुझे दोष मत दो, मैंने इस अर्थव्यवस्था को विरासत में मिला।
दुर्भाग्यवश फिर से डिज़ाइन के लिए कोई समय नहीं है। कोई सुझाव?
पिछले महीने से क्या बदल गया? –
सभी एनयूएलएल को '' '' पर अपडेट करें, फिर आईएसएनयूएलएल के बिना क्वेरी चलाएं। लेकिन रीमस का सवाल बहुत प्रासंगिक है, उस अवधि में * क्या * बदल गया है? – MatBailie
क्या आपने इसे मर्ज के रूप में पुनः लिखने पर विचार किया है? क्या आपने 60 आईएसएनयूएलएल कॉल को खत्म करने के लिए उन स्तंभों को गैर-शून्य बनाने पर विचार किया है? –