Κατάλογος άρθρου
Η μηχανή αποθήκευσης ενός πίνακα βάσης δεδομένων είναι σαν τη μηχανή ενός αυτοκινήτου. Η αλλαγή της μηχανής αλλάζει αμέσως την απόδοση και τα χαρακτηριστικά. Πολλοί άνθρωποι πιστεύουν ότι μια βάση δεδομένων προορίζεται μόνο για την αποθήκευση δεδομένων, αλλά όταν προσπαθείτε πραγματικά να μετατρέψετε το InnoDB σε MyISAM , θα ανακαλύψετε τις κρυφές πολυπλοκότητες πίσω από αυτήν.
Γιατί κάποιος να θέλει να αλλάξει από το InnoDB στο MyISAM;
Σε πολλά σενάρια, το MyISAM είναι ταχύτερο, ειδικά για εφαρμογές που απαιτούν μεγάλο όγκο ανάγνωσης και μικρότερες εγγραφές, όπως βάσεις δεδομένων καταγραφής και στατιστικών.
Ο μηχανισμός κλειδώματος σε επίπεδο τραπεζιού λειτουργεί πολύ ομαλά υπό χαμηλή ταυτόχρονη λειτουργία.
Επιπλέον, η αποθήκευση αρχείων του MyISAM είναι πιο εύχρηστη. .MYD Αποθήκευση δεδομένων, ένα .MYI Η αποθήκευση ευρετηρίων, η μετεγκατάσταση και η δημιουργία αντιγράφων ασφαλείας είναι πολύ βολικές.
Ωστόσο, η υποστήριξη συναλλαγών και ξένου κλειδιού της InnoDB είναι σχεδόν απαραίτητη σε πολύπλοκα επιχειρηματικά σενάρια.
Επομένως, πρέπει να διαπιστώσετε εάν η επιχείρησή σας χρειάζεται πραγματικά αυτές τις δυνατότητες πριν κάνετε τη μετάβαση.
Βασική εντολή: ALTER TABLE
Για να μετατρέψετε έναν μόνο πίνακα από InnoDB σε MyISAM, χρειάζεστε μόνο μία γραμμή κώδικα:
ALTER TABLE `你的表名` ENGINE = MyISAM;
Αφού ολοκληρωθεί η εκτέλεση, θα ενεργοποιηθεί η μηχανή αποθήκευσης του πίνακα.
Δεν είναι αυτό απλό;
Μαζική μετατροπή: Αυτόματη δημιουργία σεναρίων
Αν έχετε δεκάδες ή και εκατοντάδες πίνακες, η χειροκίνητη τροποποίησή τους σίγουρα δεν είναι πρακτική.
Σε αυτό το σημείο, ένα μόνο ερώτημα μπορεί να χρησιμοποιηθεί για την αυτόματη δημιουργία δηλώσεων μαζικής μετατροπής:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
Μετά την εκτέλεση, θα εμφανίσει μια δέσμη... ALTER TABLE ... Δήλωση.
Αντιγράψτε αυτές τις εντολές και εκτελέστε τες όλες ταυτόχρονα για να ολοκληρώσετε τη μαζική μετατροπή με μία κίνηση.
Αυτό είναι γνωστό ως «αυτοματοποιημένη μετατροπή παρτίδας».
Εκτίμηση κινδύνου πριν από τη μετατροπή

Περιορισμοί ξένου κλειδιού
Το InnoDB υποστηρίζει ξένα κλειδιά, ενώ το MyISAM δεν τα υποστηρίζει καθόλου.
Μόλις ολοκληρωθεί η μετατροπή, οι περιορισμοί του ξένου κλειδιού θα απορριφθούν.
Εάν η επιχείρησή σας βασίζεται σε διαδοχικές διαγραφές ή ενημερώσεις, η λογική θα αποτύχει εντελώς μετά τη μετατροπή.
Υποστήριξη συναλλαγών
Το InnoDB διαθέτει συναλλαγές και τις υποστηρίζει. COMMIT 和 ROLLBACK.
Το MyISAM δεν έχει συναλλαγές, μόνο κλειδώματα σε επίπεδο πίνακα.
Μετά τη μετατροπή, όλος ο κώδικας που σχετίζεται με τη συναλλαγή θα καταστεί άκυρος και η επαναφορά θα είναι αδύνατη σε περίπτωση εξαίρεσης.
Απόδοση ταυτόχρονης λειτουργίας
Το InnoDB χρησιμοποιεί κλείδωμα σε επίπεδο γραμμών, ενώ το MyISAM χρησιμοποιεί κλείδωμα σε επίπεδο πίνακα.
Σε σενάρια υψηλής ταυτόχρονης λειτουργίας, το MyISAM συχνά κλειδώνει πίνακες, οδηγώντας σε σημεία συμφόρησης στην απόδοση.
Χαρακτηριστικά ευρετηρίου
Πριν από την έκδοση 5.6 του MySQL , το MyISAM είχε ένα μοναδικό ευρετήριο πλήρους κειμένου.
Ωστόσο, στις εκδόσεις MySQL 5.6+ και MariaDB 10+, το InnoDB υποστηρίζει ήδη την ευρετηρίαση πλήρους κειμένου.
Επομένως, εκτός αν χρησιμοποιείτε παλαιότερη έκδοση, δεν χρειάζεται να μεταβείτε στο MyISAM για ευρετηρίαση πλήρους κειμένου.
Διαδικασία βέλτιστων πρακτικών
Δεδομένα αντιγράφων ασφαλείας Πριν από τη μετατροπή, φροντίστε να κάνετε εξαγωγή.
.sqlΤα αρχεία αποθηκεύονται για να διασφαλιστεί ότι μπορούν να αποκατασταθούν ανά πάσα στιγμή.Ελέγξτε τη δομή του πίνακα χρησιμοποιώντας την ακόλουθη εντολή για να δείτε εάν υπάρχουν ξένα κλειδιά:
SHOW CREATE TABLE `你的表名`;Εκτέλεση μετατροπής 使用
ALTER TABLEΕναλλακτικά, μπορούν να χρησιμοποιηθούν σενάρια δέσμης για την ολοκλήρωση της μετατροπής.Ελέγξτε την κατάσταση εύρυθμης λειτουργίας . Μετά τη μετατροπή, εκτελέστε:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;Αυτό επιβεβαιώνει ότι ο πίνακας λειτουργεί σωστά και απελευθερώνει τμήματα.
Μέθοδος αντίστροφης ανάκτησης
Εάν παρατηρηθεί υποβάθμιση της απόδοσης ή προβλήματα επιχειρηματικής λογικής μετά τη μετατροπή, μπορείτε να επιστρέψετε στο InnoDB ανά πάσα στιγμή:
ALTER TABLE `你的表名` ENGINE = InnoDB;
Αυτό ονομάζεται «αναστρέψιμη λειτουργία», που σας δίνει μια διέξοδο.
Αναφέρθηκαν έγκυρες απόψεις
Σύμφωνα με την επίσημη τεκμηρίωση της MySQL :
"Κατασκευή ξένου κλειδιού"aiΤα nts υποστηρίζονται μόνο από το InnoDB. Εάν μετατρέψετε έναν πίνακα σε MyISAM, όλα τα ξένα κλειδιά θα αγνοηθούν.
——Εγχειρίδιο αναφοράς MySQL, Κεφάλαιο 14.6.6 Περιορισμοί ξένου κλειδιού
Αυτή η δήλωση μας λέει ξεκάθαρα ότι τα ξένα κλειδιά είναι εντελώς άκυρα στο MyISAM.
Η επίσημη τεκμηρίωση της MariaDB τονίζει επίσης:
"Το MyISAM δεν υποστηρίζει συναλλαγές. Οι εφαρμογές που βασίζονται στην ακεραιότητα των συναλλαγών δεν θα πρέπει να χρησιμοποιούν το MyISAM."
——Βάση γνώσεων MariaDB, Μηχανές αποθήκευσης
Γι' αυτό πρέπει να το σκεφτείτε δύο φορές πριν κάνετε μια αλλαγή.
Η άποψή μου και το συμπέρασμά μου
Η μετατροπή του InnoDB σε MyISAM είναι σαν να αντικαθιστάς τον κινητήρα ενός πολυτελούς αυτοκινήτου με έναν κινητήρα φορτηγού.
Μπορεί να τρέξει, αλλά τρέχει με εντελώς διαφορετικό τρόπο.
Εάν η επιχείρησή σας περιλαμβάνει απλά στατιστικά ερωτήματα, η ταχύτητα και η απλότητα του MyISAM μπορεί να είναι πιο κατάλληλες.
Ωστόσο, εάν το σύστημά σας βασίζεται σε συναλλαγές και ξένα κλειδιά, η απερίσκεπτη μετατροπή τους είναι σαν να αφαιρείτε τον αερόσακο.
Επομένως, η αληθινή σοφία δεν έγκειται στην τυφλή επιδίωξη της ταχύτητας, αλλά στην εξισορρόπηση της σταθερότητας και της απόδοσης.
Η επιλογή της βάσης δεδομένων καθορίζει την ψυχή του συστήματος.
Η τελειοποίηση των δεξιοτήτων εναλλαγής μηχανών αποθήκευσης δεν αποτελεί μόνο επίδειξη τεχνικής ικανότητας, αλλά και αναβάθμιση της αρχιτεκτονικής σκέψης.
Εάν σκέφτεστε να κάνετε μαζική μετατροπή, παρακαλούμε να διενεργήσετε πρώτα μια ολοκληρωμένη αξιολόγηση κινδύνου.
Εκτελέστε το περιβάλλον δοκιμής μία φορά για να προσομοιώσετε πραγματικά επιχειρηματικά σενάρια.
Αφού επιβεβαιώσετε ότι όλα είναι σωστά, εκτελέστε το στο περιβάλλον παραγωγής.
Οι βάσεις δεδομένων δεν είναι παιχνίδια· είναι η καρδιά των δεδομένων της επιχείρησης.
Και εσύ είσαι αυτός που ελέγχει τον ρυθμό της καρδιάς σου.
Ας ελπίσουμε ότι το άρθρο "Πώς να μετατρέψετε σε παρτίδες πίνακες InnoDB σε πίνακες MyISAM σε βάσεις δεδομένων MySQL/MariaDB;" που κοινοποιήθηκε στο ιστολόγιο του Chen Weiliang ( https://www.chenweiliang.com/ ) θα σας φανεί χρήσιμο.
Μη διστάσετε να κοινοποιήσετε τον σύνδεσμο αυτού του άρθρου: https://www.chenweiliang.com/cwl-34157.html
