निम्नलिखित प्रश्न पर विचार करें:
MERGE [Parameter] with (rowlock) AS target
USING (SELECT @AreaId, @ParameterTypeId, @Value)
AS source (AreaId, ParameterTypeId, Value)
ON (target.AreaId = source.AreaId AND
target.ParameterTypeId = source.ParameterTypeId)
WHEN MATCHED THEN
UPDATE SET target.Value = source.Value, @UpdatedId = target.Id
WHEN NOT MATCHED THEN
INSERT ([AreaId], [ParameterTypeId], [Value])
VALUES (source.AreaId, source.ParameterTypeId, source.Value);
सांख्यिकी I / O निम्नलिखित आउटपुट देता है:
तालिका 'पैरामीटर'। स्कैन काउंट 0, लॉजिकल रीड 2, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लॉब लॉजिकल रीड्स 0, लॉब फिजिकल रीड्स 0, लॉब रीड-फॉरवर्ड रीड्स 0.
टेबल 'एरिया'। स्कैन काउंट 0, लॉजिकल रीड्स 2, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लॉब लॉजिकल रीड्स 0, लॉब फिजिकल रीड्स 0, लॉब रीड-फॉरवर्ड रीड्स 0.
टेबल 'पैरामीटर'। स्कैन काउंट 1, लॉजिकल रीड 4, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लॉब लॉजिकल रीड्स 0, लॉब फिजिकल रीड्स 0, लॉब रीड-
फॉरवर्ड रीड्स 0. टेबल 'वर्कटेबल'। स्कैन काउंट 1, लॉजिकल रीड्स 0, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लॉब लॉजिकल रीड्स 0, लॉब फिजिकल रीड्स 0, लॉब रीड-फॉरवर्ड रीड्स 0।
मैसेज टैब में वर्कटेबल दिखाई देता है जिससे मुझे लगता है कि टेम्पर्डब द्वारा उपयोग किया जा रहा है MERGE
।
मैं निष्पादन योजना में ऐसा कुछ भी नहीं देख रहा हूं जो टेम्पर्डब की आवश्यकता का संकेत दे
MERGE
हमेशा टेम्पर्ड बीडी का उपयोग करता है ?
क्या BOL में ऐसा कुछ है जो इस व्यवहार की व्याख्या करता है?
इस स्थिति में उपयोग करना INSERT
और UPDATE
तेज होगा ?
बाएं
सही
यहाँ तालिका संरचना है
tempdb
। अजीब लगता है कि यह एक एकल पंक्ति के लिए है। मुझे लगता है कि यह हेलोवीन सुरक्षा के लिए हो सकता है।