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

MyISAM रिकॉर्ड संरचना को समझना

MyISAM से संबंधित प्रश्न में आपके पास जो जानकारी है, वह सही निशाने पर है। हालांकि, मैं आपके दो अतिरिक्त प्रश्नों का समाधान करना चाहूंगा:

नवीनतम प्रश्न

पुस्तक के अनुसार

अध्याय 10 :"भंडारण इंजन" पृष्ठ 196 अनुच्छेद 7 कहता है

उस पैराग्राफ के आधार पर, पुराना रिकॉर्ड लिंकेज डेटा के साथ तभी ओवरराइट हो जाता है, जब डालने के लिए नया डेटा पहले से आवंटित ब्लॉक में फिट नहीं हो सकता है। इसके परिणामस्वरूप कई फूली हुई पंक्तियाँ हो सकती हैं।

अतिरिक्त प्रश्न

मेरे पिछले उत्तर से, बहुत सारे ब्लॉक होंगे जिनमें

  • अंतरिक्ष का अवरोध
  • रिकॉर्ड की लंबाई
  • ब्लॉक में अप्रयुक्त बाइट्स की संख्या
  • शून्य मान संकेतक फ़्लैग
  • संभावित रूप से रिकॉर्ड की निरंतरता के लिए एक संकेतक यदि रिकॉर्ड पहले बनाए गए स्थान में फिट नहीं था और उसे विभाजित किया जाना था

इस तरह के रिकॉर्ड लिंक प्रत्येक पंक्ति के सामने शुरू होंगे जिसमें बड़े आकार का डेटा डाला जा रहा है। यह एक MyISAM तालिकाओं को फूला सकता है .MYD फ़ाइल बहुत जल्दी।

सुझाव

MyISAM का डिफ़ॉल्ट पंक्ति स्वरूप गतिशील है। जब कोई तालिका गतिशील होती है और बहुत सारे INSERTs, UPDATEs, और DELETEs का अनुभव करती है, तो ऐसी तालिका को

के साथ अनुकूलित करने की आवश्यकता होगी
OPTIMIZE TABLE mytable;

एक विकल्प है:तालिका के पंक्ति प्रारूप को फिक्स्ड पर स्विच करें। इस तरह, सभी पंक्तियों का आकार समान है। इस प्रकार आप पंक्ति प्रारूप को स्थिर बनाते हैं:

ALTER TABLE mytable ROW_FORMAT=Fixed;

एक निश्चित पंक्ति प्रारूप के साथ भी, एक उपलब्ध रिकॉर्ड का पता लगाने में समय लगना चाहिए लेकिन समय ओ (1) खोज समय होगा (आम आदमी के शब्दों में, उपलब्ध रिकॉर्ड का पता लगाने में उतना ही समय लगेगा, चाहे कितनी भी पंक्तियाँ हों तालिका में या कितनी हटाई गई पंक्तियाँ हैं)। आप समवर्ती_सम्मिलित करें इस प्रकार:

इसे my.cnf में जोड़ें

[mysqld]
concurrent_insert = 2

MySQL पुनरारंभ की आवश्यकता नहीं है। बस दौड़ें

mysql> SET GLOBAL concurrent_insert = 2;

इससे सभी INSERT खाली स्थान की तलाश किए बिना तालिका के पीछे चले जाएंगे।

निश्चित पंक्ति तालिकाओं का लाभ

  • INSERTs, UPDATEs, और DELETEs कुछ तेज़ होंगे
  • चुनें 20-25% तेज़ हैं

पंक्ति प्रारूपों को ठीक करने के लिए SELECT के तेज़ होने पर मेरी कुछ पोस्ट यहां दी गई हैं

फिक्स्ड रो टेबल के नुकसान

ज्यादातर मामलों में, जब आप ALTER TABLE mytable ROW_FORMAT=Fixed; चलाते हैं , तालिका 80-100% बढ़ सकती है। .MYI फ़ाइल (MyISAM तालिका के लिए अनुक्रमणिका पृष्ठ) भी उसी दर से बढ़ेगी।

EPILOGUE

यदि आप MyISAM तालिकाओं के लिए गति चाहते हैं और बड़ी तालिकाओं के साथ रह सकते हैं, तो मेरे वैकल्पिक सुझावों की आवश्यकता होगी। यदि आप प्रत्येक MyISAM तालिका के लिए स्थान को संरक्षित करना चाहते हैं, तो पंक्ति प्रारूप को (गतिशील) के रूप में छोड़ दें। आपको टेबल को OPTIMIZE TABLE mytable; . से कंप्रेस करना होगा गतिशील तालिकाओं के साथ अधिक बार।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL त्रुटि #2014 - सिंक से बाहर कमांड; आप अभी यह आदेश नहीं चला सकते हैं

  2. MySQL INSERT INTO टेक्स्ट में एक लाइन ब्रेक जोड़ना

  3. पीडीओ एकाधिक प्रश्न:प्रतिबद्ध और रोलबैक लेनदेन

  4. MySQL:रोलअप जिज्ञासा के साथ कुल समूह

  5. MySQL पंक्ति को केवल पढ़ने के लिए कैसे सेट करें?