Is SQL Server smart enough to not do IO when it is not really needed? -
मेरे पास एक मर्ज स्टेटमेंट है जो इस तरह दिखता है:
(Target.Id = source.Id) पर स्रोत (आईडी, विवरण, यूनिकटॉस्ट) के रूप में आईडी आईडी = source.Id, विवरण = स्रोत। विवरण, यूनिटकास्ट = सोर्स सेट करें (आईडी, विवरण, यूनिटकास्ट से टेबलब का चयन करें)। यूनिटकास्ट जब मिलान नहीं किया जाता है तो सम्मिलित करें (आईडी, विवरण, यूनिटकास्ट) मान (स्रोत.आईडी, स्रोत। वर्णन, स्रोत। यूनिटकास्ट); जब मैं इसे चलाता हूं यह बताता है कि कितनी पंक्तियों को प्रभावित किया गया था। अगर मैं इसे चलाता हूं और मुझे पता है कि स्रोत और गंतव्य बिल्कुल वैसा ही है, तो मुझे अभी भी एक संदेश मिल रहा है कि पंक्तियों की x संख्या प्रभावित होती है मेरे मामले में यह लगभग 200 पंक्तियाँ हैं क्या एसक्यूएल सर्वर डिस्क पर समान डेटा को फिर से लिख रहा है?
200 पंक्तियाँ कुछ भी नहीं है और आसानी से SQL सर्वर के प्रदर्शन को प्रभावित करने के साथ फिर से लिखा जा सकता है लेकिन अगर मेरे पास 500,000+ पंक्तियों और कई सारे इंडेक्सस के साथ एक मर्ज स्टेटमेंट है, तो तालिका में सभी डेटा को फिर से अपडेट करना महंगा हो रहा है।
क्या मुझे यह जांचने की आवश्यकता है कि डेटा
यदि हां, तो मैं मर्ज स्टेटमेंट में कैसे कर सकता हूं (शायद ऊपर का अपना उदाहरण इस्तेमाल कर रहा हूं)?
पर स्रोत (आईडी, विवरण, यूनिककास्ट) के रूप में टेबलए को एक लक्ष्य के रूप में मर्ज करें (आईडी, विवरण, तालिका से यूनिटकास्ट) चुनें (Target.id = source.Id) जब मिलान किया गया है और (आईडी & lt; & gt; source.ID या विवरण & lt; & gt; स्रोत.उपकरण या यूनिटकास्ट & lt; & gt; Source.UnitCost) फिर आईडी = source.Id सेट करें, विवरण = Source.Description, UnitCost = Source.UnitCost जब मिलान नहीं किया जाता है तो सम्मिलित करें (आईडी, विवरण, यूनिटकास्ट) मान (source.Id, source.Description, source.UnitCost); आप मिलानित कथन के लिए एक सशर्त खोज अनुभाग जोड़ सकते हैं, यह मूल रूप से यह सुनिश्चित करने के लिए जांचता है कि वास्तव में कुछ बदल गया है निश्चित नहीं है कि यह जरूरी होगा कि तेज हो लेकिन यह उन पंक्तियों को अपडेट नहीं करेगा जिन्हें अपडेट करने की आवश्यकता नहीं है।
यदि आपको अधिक जानकारी की आवश्यकता है तो डॉक्स की जांच करें
Comments
Post a Comment