क्या एकाधिक अपडेट बनाम एकाधिक अपडेट के साथ एक अपडेट निष्पादित करना अधिक कुशल है - एसक्यूएल, एसक्लपरफॉर्मेंस, एसक्यूएल-सर्वर-2014-एक्सप्रेस

आपको क्या लगता है बेहतर है।हर बार किसी तालिका के सभी स्तंभों को अपडेट करें, भले ही सभी मान परिवर्तन न हों, या केवल परिवर्तित स्तंभों को एकाधिक अद्यतनों के साथ अपडेट करें। विचार यह है कि हर एक बदलाव को तुरंत अपडेट करने के बजाय, कुछ बदलावों की प्रतीक्षा करें और फिर सभी कॉलमों को अपडेट करें, लेकिन मैं यह तर्क नहीं लागू करना चाहता हूं कि कौन से कॉलम को बदला गया है।

UPDATE myTable
SET col1 = newVal1,
col2 = oldVal2,
col3 = newVal3,
...
WHERE x = y

बनाम

UPDATE myTable SET col1 = newVal1 WHERE x = y
UPDATE myTable SET col3 = newVal3 WHERE x = y
...

मैं एसक्यूएल सर्वर 2014 एक्सप्रेस का उपयोग कर रहा हूं।

उत्तर:

जवाब के लिए 5 № 1

पहली क्वेरी बहुत बेहतर प्रदर्शन करेगी क्योंकि, इसे केवल एक करने की आवश्यकता है scan/seek मेज़ पर। लेकिन पहली क्वेरी में आप उस कॉलम को अपडेट कर सकते हैं जिसमें नए मान हैं जिन्हें अपडेट किया जाना है:

UPDATE myTable
SET col1 = newVal1,
col3 = newVal3,
...
where x = y

लेकिन दूसरी क्वेरी के लिए है scan/seek प्रत्येक के लिए तालिका Update जो पहली क्वेरी से अधिक समय लेगा।


उत्तर № 2 के लिए 1

एक अद्यतन करना बेहतर है। लेकिन, यह वास्तव में एक सवाल है कि आप अपने कोड में क्या शब्दार्थ लागू करना चाहते हैं। यहाँ दो महत्वपूर्ण प्रश्न हैं:

  • क्या आप चाहते हैं कि स्तंभ का नया मान तुरंत तालिका के अन्य उपयोगकर्ताओं के लिए उपलब्ध हो?
  • क्या डेटा के लगातार बने रहने के लिए दो मूल्यों को "एक ही समय में" बदलना होगा?

पहले मामले में, आप अलग-अलग लेनदेन में अलग-अलग अपडेट कर सकते हैं।

दूसरे मामले में, आप एक ही लेन-देन में सभी अपडेट करना चाहते हैं, आदर्श रूप से एक ही बयान में।

प्रदर्शन के लिए, एकल अद्यतन तेज़ है। एक सूचकांक x या y (जो भी तालिका में वास्तविक कॉलम है) क्वेरी के सभी संस्करणों को गति देगा।


संबंधित सवाल
सबसे लोकप्रिय