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

MySQL में MyISAM के साथ कार्य करना

MyISAM MySQL में सबसे लोकप्रिय स्टोरेज इंजनों में से एक है। MyISAM अक्सर InnoDB के बाद दूसरी पसंद है - इस ब्लॉग पोस्ट में हम यह पता लगाने की कोशिश करेंगे कि इस इंजन के साथ सबसे अच्छा कैसे काम किया जाए।

MyISAM क्या है?

MyISAM, MySQL के स्टोरेज इंजनों में से एक है। MyISAM ISAM (इंडेक्सेड सीक्वेंशियल एक्सेस मेथड) पर आधारित है, जो IBM द्वारा विकसित एक इंडेक्सिंग एल्गोरिथम है जो डेटा के बड़े सेट से तेजी से जानकारी प्राप्त करने की अनुमति देता है। हालांकि, टेबल लॉक होने के कारण एक साथ पढ़ने और एक टेबल पर लिखने पर यह बहुत अच्छा नहीं करता है। यह लेनदेन का भी समर्थन नहीं करता है।

कुछ MySQL इंजीनियरों के लिए, यह इंजन InnoDB के बाद सबसे लोकप्रिय विकल्प है:MyISAM स्टोरेज इंजन 2005 में MySQL द्वारा प्रदान किया गया एकमात्र स्टोरेज इंजन था और 20 से अधिक वर्षों से उपयोग के लिए उपलब्ध था। MyISAM संस्करण 5.5 तक MySQL के लिए डिफ़ॉल्ट स्टोरेज इंजन था।

अंदर से MyISAM

MyISAM अंदर से कैसे काम करता है इसका एक उदाहरण इस ब्लॉग के दायरे में नहीं है, लेकिन हम आपको ऐसी सेटिंग्स प्रदान कर सकते हैं जो आपको इंजन के प्रदर्शन को अनुकूलित करने में मदद करती हैं:

  • Myisam_sort_buffer_size उस बफर को परिभाषित करता है जिसे REPAIR, CREATE INDEX या ALTER TABLE क्वेरी चलाकर इंडेक्स को सॉर्ट करने पर आवंटित किया जाता है।
  • Key_buffer_size MyISAM टेबल पर इंडेक्स ब्लॉक के लिए उपयोग किए जाने वाले बफर के आकार को परिभाषित करता है। इस पैरामीटर को बढ़ाने से बेहतर इंडेक्स हैंडलिंग हो सकती है।
  • Sort_buffer_size बफ़र के आकार का वर्णन करता है जो उन थ्रेड्स के लिए आवंटित किया जाता है जिन्हें सॉर्ट ऑपरेशन करने की आवश्यकता होती है।
  • Read_buffer_size एक बफर के आकार का वर्णन करता है जो अनुक्रमिक स्कैन संचालन करने वाले थ्रेड के लिए आवंटित किया जाता है।
  • Write_buffer_size राइट बफ़र के आकार का वर्णन करता है।

ये चार पैरामीटर महत्वपूर्ण हैं, लेकिन जब वे महत्वपूर्ण हैं, तो आपको key_buffer_size वेरिएबल पर भी नजर रखनी चाहिए। key_buffer_size वैरिएबल मेमोरी में रखे गए इंडेक्स बफ़र्स के आकार को निर्धारित करता है - इसे innodb_buffer_pool_size समकक्ष के रूप में सोचें, लेकिन MyISAM के लिए। यदि आपके सर्वर में मुख्य रूप से MyISAM तालिकाएँ हैं, तो आप सर्वर पर उपलब्ध RAM का लगभग 25% या अधिक key_buffer_size चर के लिए आवंटित कर सकते हैं। यह निर्धारित करने का एक और तरीका भी है कि key_buffer_size पैरामीटर का मान क्या होना चाहिए - बस key_read_requests मान (इंडेक्स पढ़ने के अनुरोधों का कुल मूल्य) और key_reads मान की तुलना करें (key_reads का मान उन अनुरोधों की संख्या है जिन्हें होना था) डिस्क से पढ़ें)। सर्वर स्थिति चर (बस अपने MySQL सर्वर पर एक SHOW GLOBAL STATUS क्वेरी जारी करें) को देखकर उन मापदंडों के मान प्राप्त किए जा सकते हैं। यह ध्यान रखना भी फायदेमंद है कि अगर key_reads एक बड़ा मान देता है, तो key_buffer_size का मान शायद बहुत छोटा है।

MyISAM और MySQL 8.0

यदि आप कुछ MySQL इंजीनियरों से पूछें, तो वे कहेंगे कि MyISAM का अब उपयोग नहीं किया जाना चाहिए। क्यों? ठीक है, कुछ लोग कहते हैं कि इस तथ्य के कारण कि जब MySQL उन्नत हुआ, तो उन्होंने उन अधिकांश सुविधाओं को जोड़ा जो पहले केवल MyISAM में केवल InnoDB में देखी जा सकती थीं, प्रभावी रूप से MyISAM को अप्रचलित रूप से प्रस्तुत करती हैं:

  • संस्करण 5.6 से InnoDB में पूर्ण-पाठ अनुक्रमणिका उपलब्ध हैं।
  • संस्करण 5.6 के बाद से InnoDB में पोर्टेबल टेबलस्पेस उपलब्ध हो गए हैं।
  • स्थानीय अनुक्रमणिकाएं InnoDB में संस्करण 5.7 से उपलब्ध हो गई हैं।
  • तालिका के लिए अंतिम अपडेट संस्करण 5.7 के बाद से InnoDB में उपलब्ध हो गया।

तो, क्या आपको अब भी MyISAM का उपयोग करना चाहिए? शायद ऩही। हालांकि एक चेतावनी है - ध्यान रखें कि साधारण COUNT(*) प्रश्न संभवतः MyISAM पर InnoDB की तुलना में तेज़ प्रदर्शन करेंगे - MyISAM तालिका मेटाडेटा में संख्या संग्रहीत करता है, InnoDB नहीं करता है।

मैं MyISAM का उपयोग कर रहा हूं और InnoDB पर स्विच करना चाहता हूं, मैं क्या करूं?

यदि आप अभी भी MyISAM का उपयोग करते हैं और InnoDB पर स्विच करना चाहते हैं, तो बस अपनी सभी तालिकाओं को InnoDB में कनवर्ट करें। जाहिर है यह कहा से आसान है, लेकिन यहां एक आसान गाइड है:

  1. पता लगाएं कि आपके MySQL इंस्टेंस में कौन-सी तालिकाएं MyISAM का उपयोग कर रही हैं:
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
  2. अपनी सभी MyISAM तालिकाओं को InnoDB में बदलें:
    ALTER TABLE `table_name` ENGINE = InnoDB;

यदि आप एक के बाद एक कई ALTER TABLE स्टेटमेंट नहीं चलाना चाहते हैं, तो ALTER TABLE स्टेटमेंट को लूप में डालने पर विचार करें। बस - आपका काम हो गया!

सारांश

MyISAM सबसे लोकप्रिय MySQL इंजनों में से एक है। इंजन 5.5 तक MySQL संस्करणों के लिए डिफ़ॉल्ट था। InnoDB के बाद इंजन सबसे लोकप्रिय विकल्पों में से एक है, लेकिन इसे MySQL 8.0 के रूप में अप्रचलित कहा जा सकता है - MySQL ने पहले ही सुनिश्चित कर लिया है कि MyISAM के साथ जो कुछ भी किया जा सकता है वह भी किया जा सकता है जब InnoDB उपयोग में हो, इसलिए इस बिंदु पर MyISAM केवल तभी उपयोगी है जब आप सरल COUNT(*) प्रश्नों को तेज़ बनाना चाहते हैं। इस तरह की क्वेरीज़ तेज़ होंगी क्योंकि MyISAM नंबर को टेबल मेटाडेटा में स्टोर करता है - अन्य MySQL इंजन नहीं करते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php के लिए mysqlnd कैसे सक्षम करें?

  2. रिपोर्ट में दो तालिकाओं से क्वेरी

  3. MySQL PHP असंगति

  4. हेक्साडेसिमल को वर्कर (डेटाटाइम) में कैसे डाला जाए?

  5. एसक्यूएल के साथ गतिशील MySQL प्रश्न तैयार कथन के रूप में सुरक्षित रूप से बच रहे हैं?