निम्नलिखित उद्धरण " उच्च प्रदर्शन MySQL, दूसरा संस्करण " पुस्तक से निकला ।
यह एक उत्कृष्ट पुस्तक है और मैं इसे किसी को भी सुझाऊंगा।
संक्षिप्त उत्तर है:
आपकी तालिका आकार और शर्तों के साथ, कोई फर्क नहीं पड़ता कि आप किस विधि का चयन करते हैं, मुझे लगता है कि आप लंबे इंतजार के लिए संभावित हैं।
टेबल बातचीत
एक टेबल को एक भंडारण इंजन से दूसरे में बदलने के कई तरीके हैं, प्रत्येक फायदे और नुकसान के साथ।
तालिका में परिवर्तन
mysql> ALTER TABLE mytable ENGINE = Falcon;
यह सिंटैक्स सभी स्टोरेज इंजन के लिए काम करता है, लेकिन इसमें एक पकड़ है: इसमें बहुत समय लग सकता है। MySQL आपकी पुरानी तालिका की पंक्ति-दर-पंक्ति एक नई तालिका में प्रदर्शन करेगा। उस समय के दौरान, आप संभवतः सर्वर के सभी डिस्क I / O क्षमता का उपयोग कर रहे होंगे, और रूपांतरण चलाते समय मूल तालिका को पढ़ा-अवरोधित किया जाएगा।
डंप और आयात
रूपांतरण प्रक्रिया पर अधिक नियंत्रण पाने के लिए, आप mysqldump उपयोगिता का उपयोग करते हुए पहली बार तालिका को टेक्स्ट फ़ाइल में डंप कर सकते हैं। एक बार जब आप टेबल को डंप कर लेते हैं, तो आप केवल उस डब फाइल को संपादित कर सकते हैं जिसमें क्रिएट टेबल स्टेटमेंट होता है। तालिका नाम के साथ-साथ इसके प्रकार को भी बदलना सुनिश्चित करें, क्योंकि आपके पास एक ही डेटाबेस में एक ही नाम के साथ दो तालिकाएँ नहीं हो सकती हैं, भले ही वे अलग-अलग प्रकार के हों और mysqldump डिफ़ॉल्ट तालिका लिखने से पहले DROP टेबल कमांड लिखने के लिए डिफॉल्ट करता हो। , तो अगर आप सावधान नहीं हैं तो आप अपना डेटा खो सकते हैं!
बनाएँ और चुनें
तीसरा रूपांतरण तकनीक पहले तंत्र की गति और दूसरे की सुरक्षा के बीच एक समझौता है। संपूर्ण तालिका को डंप करने या एक ही बार में सभी को रूपांतरित करने के बजाय, नई तालिका बनाएं और MySQL के INSERT का उपयोग करें ... इसे पॉप्युलेट करने के लिए सिंटैक्स का चयन करें, निम्नानुसार:
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
यदि आपके पास बहुत अधिक डेटा नहीं है, तो यह अच्छी तरह से काम करता है, लेकिन यदि आप करते हैं, तो यह अक्सर तालिका को पर्याप्त रूप से पॉप्युलेट करने के लिए अधिक कुशल होता है, जिससे प्रत्येक चंक के बीच लेनदेन होता है, जिससे पूर्ववत लॉग बड़ा नहीं होता है। मान लें कि आईडी प्राथमिक कुंजी है, तो इस क्वेरी को बार-बार (हर बार x और y के बड़े मानों का उपयोग करके) तब तक चलाएं जब तक कि आप सभी डेटा को नई तालिका में कॉपी न कर दें:
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
ऐसा करने के बाद, आपको मूल तालिका के साथ छोड़ दिया जाएगा, जिसे आप ड्रॉप कर सकते हैं जब आप इसके साथ कर रहे हैं, और नई तालिका, जो अब बहुत लोकप्रिय है। डेटा की असंगत प्रतिलिपि प्राप्त करने से रोकने के लिए यदि आवश्यक हो तो मूल तालिका को लॉक करने के लिए सावधान रहें!