Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सभी पंक्तियों के एक कॉलम का मान सेट करना बहुत धीमा है

InnoDB में, update स्टेटमेंट उनके द्वारा स्कैन की जाने वाली प्रत्येक पंक्ति को लॉक कर देते हैं। इसका मतलब यह है कि आपकी 200 पंक्तियों को अपडेट करने के लिए, इसे 350 000 पंक्ति-स्तर के ताले बनाने होंगे, जबकि एक ही समय में रोलबैक लॉक रखना होगा और किसी भी लेन-देन को पिछला मूल्य प्रदान करना होगा जो पहले से बदले हुए मूल्य को पढ़ रहे हैं (चूंकि लेनदेन नहीं है प्रतिबद्ध है और परिवर्तन अंतिम नहीं है)

दूसरी ओर MyISAM पूरी टेबल को लॉक कर देता है।

इसलिए यदि आपको सभी पंक्तियों को अपडेट करने की आवश्यकता है, तो संपूर्ण तालिका को लॉक करें, और आपको बेहतर प्रदर्शन मिलेगा (आपको पंक्ति-स्तरीय लॉक की आवश्यकता नहीं होगी)

लेकिन इससे भी बेहतर, WHERE क्लॉज प्रदान करें, जैसा आपने किया था, और InnoDB केवल मिलान पंक्तियों के लिए ताले प्राप्त करेगा (साथ ही इंडेक्स ट्री में कुछ गैप-लॉक, लेकिन यह प्रश्न के दायरे से बाहर है)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. गलत अपवाद पकड़ना

  2. एसक्यूएल डेटाबेस टेबल से टेक्स्ट-बॉक्स में डेटा कैसे लोड करें

  3. एक MySQL तालिका से डुप्लिकेट पंक्तियों को कैसे हटाएं

  4. ON DELETE CASCADE बाधाओं को किस क्रम में संसाधित किया जाता है?

  5. एसक्यूएल इंजेक्शन रोकथाम