MySQL और SQL सर्वर में स्पष्ट रूप से प्रतिबद्ध बनाम ऑटो-प्रतिबद्ध लेनदेन के बीच प्रदर्शन अंतर

MySQL में, मैं निम्नलिखित के साथ परमाणु रूप से लेनदेन की एक श्रृंखला घोंसला कर सकते हैं:

START TRANSACTIONS;

UPDATE balance
SET current_balance = 40
WHERE id = 1;
UPDATE balance
SET current_balance = 50
WHERE id = 2;

COMMIT;

मैं SQL सर्वर में वही काम कर सकता हूं

BEGIN TRANSACTION

UPDATE balance
SET current_balance = 40
WHERE id = 1;
UPDATE balance
SET current_balance = 50
WHERE id = 2;

COMMIT TRANSACTION

क्या उपरोक्त बनाम घोंसले (कोई स्टार्ट/BEGIN और COMMIT कमांड) में उनके संबंधित डेटाबेस सिस्टम में बयान में कितनी तेजी से क्वेरी निष्पादित की जाती है, इसमें कोई अंतर है?

0

3 उत्तर

स्पष्ट लेनदेन का उपयोग करना तेजी से होना चाहिए, खासकर यदि आप बहुत सारे आवेषण या अपडेट करते हैं।

  • निहित लेनदेन (MySQL में autocommit = 1) के लिए, डेटाबेस इंजन को प्रत्येक कथन के बाद डिस्क (या उस मामले के लिए डिस्क कैश) पर लेनदेन लॉग लिखना होगा।
  • स्पष्ट लेनदेन (MySQL में autocommit = 0) के लिए, डेटाबेस इंजन संभावित रूप से लेनदेन में उपयोग किए गए सभी विवरणों के लिए लेनदेन लॉग लिखने के लिए केवल एक इनपुट/आउटपुट ऑपरेशन कर सकता है।

आईएमएचओ हालांकि यह केवल दो अपडेट स्टेटमेंट्स में ध्यान देने योग्य नहीं होगा।

लेकिन लेनदेन मुख्य रूप से गति के बारे में नहीं हैं बल्कि पूरे ऑपरेशन की स्थिरता और परमाणुता।


MySQL में बीटीडब्ल्यू आप एक साथ तरीके से एक लेनदेन शुरू किए बिना दो रिकॉर्ड अपडेट कर सकते हैं

UPDATE balance b1 JOIN balance b2
    ON b1.id = 1 
   AND b2.id = 2
   SET b1.current_balance = 40,
       b2.current_balance = 50

या MySQL और SQL सर्वर दोनों में

UPDATE balance 
   SET CASE id WHEN 1 THEN 40 
               WHEN 2 THEN 50
       END
 WHERE id IN(40, 50)

आगे की पढाई:

0
जोड़ा
क्या आप कह सकते हैं कि जब आप कहते हैं कि उन्हें फ्लशिंग के लिए ओवरहेड की आवश्यकता नहीं है तो आप थोड़ा और विशिष्ट हो सकते हैं?
जोड़ा लेखक Lloyd Banks, स्रोत
इसलिए 1000 अपडेट स्टेटमेंट्स को अलग-अलग फ्लश करना 1000 अपडेट स्टेटमेंट्स के साथ 1 स्पष्ट लेनदेन को फ्लश करने से धीमा होगा?
जोड़ा लेखक Lloyd Banks, स्रोत
इसका मतलब है कि आपके द्वारा किए गए स्पष्ट लेन-देन परिवर्तनों का उपयोग करते समय तुरंत स्थायी नहीं किया जाता है। इसके विपरीत जब प्रत्येक कथन के बाद एक ऑटोोकॉमिट मोड में परिवर्तन स्थायी हो जाते हैं (तालिका में डिस्क में फ्लैश किया जा रहा है)।
जोड़ा लेखक peterm, स्रोत
ठीक ठीक। Thats क्यों सलाह दी जाती है जब आप बहुत से आवेषण या अद्यतन करते हैं तो यह एक कथन करता है या ऑटोोकॉमिट अक्षम करता है और स्पष्ट लेनदेन का उपयोग करता है।
जोड़ा लेखक peterm, स्रोत

एसक्यूएल स्टेटमेंट्स के लिए डिफॉल्ट एसक्यूएल सर्वर गारंटी परमाणुता से लेकिन एसक्यूएल बैचों पर अधिक परमाणुता को लागू करने के लिए (अधिक तो एक वर्ग कथन) लेनदेन का उपयोग किया जाता है।

किसी भी प्रदर्शन को प्राप्त करने के लिए स्पष्ट लेनदेन का उपयोग नहीं किया जाता है बल्कि लेनदेन के अंदर लिपटे विभिन्न संचालन/एसक्यूएल स्टेटमेंट्स के बीच परमाणु को नियंत्रित करने के लिए उपयोग किया जाता है, इसलिए हमारे पास लक्ष्य डेटा पर किए गए कई संचालनों का नियंत्रण होता है ताकि वे सभी को या रोलबैक को कम कर सकें, और डेटा शेष नहीं है आधे राज्य में।

हां स्पष्ट लेनदेन प्रदर्शन पर असर डाल सकता है, क्योंकि एक स्पष्ट लेनदेन के अंदर उपयोग किए जाने वाले संसाधन लेनदेन द्वारा बंद कर दिए जाते हैं और अन्य उपयोगकर्ताओं के लिए उपलब्ध नहीं होते हैं। लेनदेन का व्यवहार विभिन्न लेनदेन अलगाव स्तरों के तहत अलग है।

0
जोड़ा

MySQL: क्वेरीज़ (दो अपडेट कथन) को उसी गति के साथ निष्पादित किया जाएगा (बिना "लेनदेन शुरू/शुरू करें" के साथ/बिना)।

आप अपने प्रश्न पर फिर से विचार करना चाहेंगे या कृपया उत्तर के साथ आने के लिए अपने प्रश्न को समझने में मेरी मदद करें।

0
जोड़ा