Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 13183|Απάντηση: 0

[Πηγή] Το MyISAM είναι η διαφορά μεταξύ της μηχανής αποθήκευσης βάσεων δεδομένων MySQL και του InnoDB

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/4/2020 9:53:49 π.μ. | | |
Όταν πρόκειται για MySQL, θα ήταν δύσκολο να κατανοήσουμε το MyISAM και το InnoDB, που είναι δύο από τις πιο γνωστές και ευρέως χρησιμοποιούμενες μηχανές αποθήκευσης MySQL. Σήμερα, θα σας μιλήσω για τη διαφορά μεταξύ MyISAM και InnoDB στη MySQL...

Τι είναι το MyISAM;

Το MyISAM είναι η προεπιλεγμένη μηχανή αποθήκευσης για το σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων MySQL (πριν από την έκδοση 5.5)。 Αυτή η δομή αποθήκευσης πινάκων MySQL επεκτείνει πολλές χρήσιμες λειτουργίες από τον παλιό κώδικα ISAM. Στη νέα έκδοση της MySQL, η μηχανή InnoDB αντικαθιστά ευρέως το MyISAM λόγω των πλεονεκτημάτων της όσον αφορά τις συναλλαγές, την ακεραιότητα αναφοράς και τον υψηλότερο συγχρονισμό.
Κάθε πίνακας MyISAM αντιστοιχεί σε τρία αρχεία στον σκληρό δίσκο. Και τα τρία αρχεία έχουν το ίδιο όνομα αρχείου, αλλά έχουν διαφορετικές επεκτάσεις για να υποδείξουν τον σκοπό του τύπου τους: το αρχείο .frm περιέχει τον ορισμό του πίνακα, αλλά αυτό το αρχείο δεν είναι μέρος της μηχανής MyISAM, αλλά μέρος του διακομιστή. Το .MYD διατηρεί τα δεδομένα του πίνακα. Το .MYI είναι το αρχείο ευρετηρίου του πίνακα.

Τι είναι το InnoDB;

Το InnoDB είναι μια άλλη μηχανή αποθήκευσης για τη MySQL και η νέα έκδοση του προτύπου που κυκλοφόρησε από την MySQL AB περιλαμβάνεται σε όλα τα πακέτα δυαδικής εγκατάστασης.5.5 και μετά ως προεπιλεγμένη μηχανή αποθήκευσης。 Τα πλεονεκτήματά του σε σχέση με άλλες μηχανές αποθήκευσης είναι η υποστήριξή του για συναλλαγές συμβατές με ACID (παρόμοιες με την PostgreSQL) και η ακεραιότητα παραμέτρων (δηλαδή, υποστήριξη για ξένα κλειδιά).

Η Oracle Corporation εξαγόρασε την Innobase τον Οκτώβριο του 2005. Το Innobase χρησιμοποιεί διπλή εξουσιοδότηση ελέγχου ταυτότητας. Διανέμεται χρησιμοποιώντας GNU και επιτρέπει επίσης σε άλλες ομάδες που θέλουν να ενσωματώσουν το InnoDB σε εμπορικό λογισμικό να αποκτήσουν άδεια χρήσης.

Οι πιο δημοφιλείς μηχανές αποθήκευσης είναι οι MyISAM και InnoDB. Οι κύριες διαφορές μεταξύ MyISAM και InnoDB είναι η απόδοση και ο έλεγχος συναλλαγών. Το MyISAM είναι μια εκτεταμένη εφαρμογή του πρώιμου ISAM (Indexed Sequential Access Method, το ISAM δεν υποστηρίζεται πλέον μετά το MySQL 5.0), το ISAM έχει σχεδιαστεί για να χειρίζεται καταστάσεις όπου η συχνότητα ανάγνωσης είναι πολύ μεγαλύτερη από τη συχνότητα εγγραφής, επομένως το ISAM και αργότερα το MyISAM δεν λαμβάνουν υπόψη την υποστήριξη των πραγμάτων, αποκλείουν το TPM, δεν χρειάζονται εγγραφές συναλλαγών, η αποτελεσματικότητα των ερωτημάτων ISAM είναι σημαντική και η κατανάλωση μνήμης είναι πολύ μικρή.
Το MyISAM κληρονομεί αυτά τα οφέλη, ενώ συμβαδίζει με την εποχή έναν μεγάλο αριθμό χρήσιμων νέων λειτουργιών και σχετικών εργαλείων. Για παράδειγμα, λαμβάνοντας υπόψη τον έλεγχο ταυτοχρονισμού, παρέχονται κλειδώματα σε επίπεδο πίνακα και παρόλο που το ίδιο το MyISAM δεν υποστηρίζει ανοχή σφαλμάτων, μπορεί να χρησιμοποιηθεί για την ανάκτηση από αστοχίες μέσω του myisamchk. Και δεδομένου ότι το MyISAM χρησιμοποιεί τα δικά του ανεξάρτητα αρχεία αποθήκευσης (αρχείο δεδομένων MYD και αρχείο ευρετηρίου MYI) για κάθε πίνακα, είναι πολύ βολικό για δημιουργία αντιγράφων ασφαλείας και επαναφορά (αρκεί η αντικατάσταση αντιγράφου) και υποστηρίζει επίσης την ηλεκτρονική ανάκτηση. Σε σύγκριση με άλλες μηχανές αποθήκευσης, το MyISAM διαθέτει τα περισσότερα εργαλεία για τον έλεγχο και την επισκευή τραπεζιών. Οι πίνακες MyISAM μπορούν να συμπιεστούν και υποστηρίζουν αναζήτηση πλήρους κειμένου. Δεν είναι ασφαλή για συναλλαγές και δεν υποστηρίζουν ξένα κλειδιά, επομένως εάν η εφαρμογή σας δεν απαιτεί συναλλαγές και χειρίζεται μόνο βασικές λειτουργίες CRUD, τότε το MyISAM είναι ο καλύτερος τρόπος.
Το InnoDB έχει σχεδιαστεί για καταστάσεις ανάγνωσης και εγγραφής υψηλής ταυτόχρονης χρήσης, χρησιμοποιώντας MVCC (Multi-Version Concurrency Control) και κλειδαριές σε επίπεδο σειράς για να παρέχει υποστήριξη συναλλαγών συμβατή με το ACID. Το InnoDB υποστηρίζει ακεραιότητα αναφοράς ξένου κλειδιού και έχει δυνατότητες ανάκτησης σφαλμάτων. Επιπλέον, η απόδοση του InnoDB είναι στην πραγματικότητα αρκετά καλή, ειδικά κατά την επεξεργασία μεγάλων ποσοτήτων δεδομένων, με επίσημους όρους: Η απόδοση της CPU του InnoDB είναι ασύγκριτη με άλλες μηχανές αποθήκευσης σχεσιακών βάσεων δεδομένων που βασίζονται σε δίσκους. Ωστόσο, η δημιουργία αντιγράφων ασφαλείας και η ανάκτηση του InnoDB είναι λίγο πιο ενοχλητική, εκτός εάν χρησιμοποιείτε την υποστήριξη Mulit-tablespace που παρέχεται από την έκδοση 4.1 ή νεότερη, επειδή σε αντίθεση με το MyISAM, τα αρχεία δεδομένων του InnoDB δεν αντιστοιχούν σε κάθε πίνακα ανεξάρτητα. Αντίθετα, χρησιμοποιείται ο κοινόχρηστος χώρος πινάκων και η απλή μέθοδος αντικατάστασης αντιγράφων δεν είναι κατάλληλη για αυτόν και τα δεδομένα πρέπει να αποκατασταθούν μετά τη διακοπή της MYSQL. Η χρήση tablespacesd ανά πίνακα κάνει κάθε πίνακα να αντιστοιχεί σε ένα ξεχωριστό αρχείο tablespace, η κατάσταση είναι πολύ πιο απλή. Έχει τα ίδια χαρακτηριστικά με τους τύπους BDB και υποστηρίζουν επίσης ξένα κλειδιά. Οι πίνακες InnoDB είναι γρήγοροι και έχουν πλουσιότερες δυνατότητες από το BDB, επομένως συνιστάται εάν χρειάζεστε μια μηχανή αποθήκευσης με ασφάλεια συναλλαγών.

Γενικά, το InnoDB είναι μια καλή επιλογή εάν απαιτείται υποστήριξη συναλλαγών και έχει υψηλή ταυτόχρονη συχνότητα ανάγνωσης και εγγραφής. Το BDB μπορεί να ληφθεί υπόψη εάν η συχνότητα ταυτόχρονων αναγνώσεων και εγγραφών δεν είναι υψηλή, αλλά το BDB δεν θα υποστηρίζεται πλέον στη MySQL 5.1 και σε νεότερες εκδόσεις. Αυτή η επιλογή έχει φύγει

Από προεπιλογή, οι συναλλαγές InnoDB είναι ανοιχτές (ορισμός αυτόματης δέσμευσης = 0), πράγμα που σημαίνει ότι κάθε φορά που εισάγεται μια εγγραφή, ο πίνακας InnoDB θα την αντιμετωπίζει ως ξεχωριστή συναλλαγή. Επομένως, εάν εισαγάγουμε 10,000 εγγραφές και δεν κλείσουμε τη συναλλαγή, τότε ο πίνακας τύπου InnoDB θα την αντιμετωπίσει ως 10,000 συναλλαγές και ο συνολικός χρόνος εισαγωγής αυτή τη στιγμή είναι πολύς, αυτή τη στιγμή, πρέπει πρώτα να απενεργοποιήσουμε τη συναλλαγή και μετά να την εισαγάγουμε, οπότε η ταχύτητα θα είναι πολύ γρήγορη Όσο για το Heap και το BDB (Berkeley DB), σχετικά μιλώντας, το ποσοστό διείσδυσης δεν είναι τόσο καλό όσο τα δύο προηγούμενα, αλλά σε ορισμένες περιπτώσεις, Η μηχανή αποθήκευσης Heap εξακολουθεί να είναι πολύ εφαρμόσιμη, η οποία αποθηκεύει δεδομένα στη μνήμη και είναι εξαιρετικά γρήγορη επειδή δεν υπάρχει αναμονή εισόδου/εξόδου δίσκου. Επειδή όμως πρόκειται για μηχανή αποθήκευσης μνήμης, τυχόν τροποποιήσεις που έγιναν θα εξαφανιστούν μετά την επανεκκίνηση του διακομιστή. Το Heap είναι ένα εξαιρετικό μέρος για να χρησιμοποιήσετε το BDB για δοκιμές, καθώς είναι η πρώτη μηχανή αποθήκευσης με ασφάλεια συναλλαγών της MySQL. Χτισμένο με βάση τη βιβλιοθήκη βάσεων δεδομένων Berkeley DB, είναι επίσης ασφαλές από συναλλακτική άποψη, αλλά το BDB προφανώς δεν είναι τόσο δημοφιλές όσο το InnoDB, επειδή οι περισσότερες μηχανές αποθήκευσης στη MySQL που υποστηρίζουν συναλλαγές αναζητούν επίσης μηχανές αποθήκευσης MVCC ή κλειδώματος σε επίπεδο σειράς, ενώ το BDB υποστηρίζει μόνο Κλείδωμα σε επίπεδο σελίδας.

Κινητήρας InnoDB

Το InnoDB είναι μια μηχανή αποθήκευσης συναλλαγών που υποστηρίζει επαναλήψεις και έχει σχεδιαστεί για να παρέχει υπηρεσίες υψηλής απόδοσης κατά την επεξεργασία μεγάλων ποσοτήτων δεδομένων και δημιουργεί ομάδες buffer στη μνήμη κατά το χρόνο εκτέλεσης για την προσωρινή αποθήκευση δεδομένων και ευρετηρίων.

Πλεονεκτήματα κινητήρα InnoDB:

1. Υποστήριξη επεξεργασίας συναλλαγών και λειτουργιών συναλλαγών ACID.

2. Πραγματοποιούνται τέσσερα επίπεδα απομόνωσης του προτύπου SQL.

3. Υποστήριξη περιορισμών κλειδώματος σε επίπεδο σειράς και ξένου κλειδιού.

4. Μπορείτε να χρησιμοποιήσετε αρχεία καταγραφής συναλλαγών για ανάκτηση δεδομένων.

5. Το επίπεδο κλειδώματος είναι το κλείδωμα σειράς, το οποίο είναι κατάλληλο για συχνή τροποποίηση πίνακα με υψηλό συγχρονισμό και ο υψηλός συγχρονισμός είναι καλύτερος από το MyISAM. Το μειονέκτημα είναι ότι η κατανάλωση του συστήματος είναι μεγάλη.

6. Το ευρετήριο όχι μόνο αποθηκεύει προσωρινά τον εαυτό του, αλλά αποθηκεύει και δεδομένα, τα οποία απαιτούν περισσότερη μνήμη από το MyISAM.

Μειονεκτήματα κινητήρα InnoDB:

Επειδή δεν αποθηκεύει τον αριθμό των γραμμών στον πίνακα, ολόκληρος ο πίνακας σαρώνεται όταν χρησιμοποιούνται στατιστικά στοιχεία COUNT.

Μηχανή MyISAM

Το MyISAM είναι η προεπιλεγμένη μηχανή πριν από τη MySQL 5.5.5 και έχει σχεδιαστεί για γρήγορη ανάγνωση.

Πλεονεκτήματα κινητήρα MyISAM:

1. Ανάγνωση υψηλής απόδοσης.

2. Επειδή αποθηκεύει τον αριθμό των σειρών στον πίνακα, ολόκληρος ο πίνακας δεν θα σαρωθεί όταν χρησιμοποιείτε στατιστικά στοιχεία COUNT.

Μειονεκτήματα κινητήρα MyISAM:

1. Το επίπεδο κλειδαριάς είναι μια κλειδαριά τραπεζιού και το πλεονέκτημα της κλειδαριάς ρολογιού είναι ότι η επιβάρυνση είναι μικρή και η κλειδαριά είναι γρήγορη. Τα μειονεκτήματα είναι ότι η ευαισθησία κλειδώματος είναι μεγάλη, η πιθανότητα ώθησης κλειδώματος είναι υψηλή και η χωρητικότητα συγχρονισμού είναι χαμηλή, η οποία είναι κατάλληλη για υπηρεσίες που βασίζονται σε ερωτήματα.

2. Αυτή η μηχανή δεν υποστηρίζει συναλλαγές ή ξένα κλειδιά.

3. Οι λειτουργίες INSERT και UPDATE πρέπει να κλειδώνουν ολόκληρο τον πίνακα.

4. Αποθηκεύει τον αριθμό των σειρών στον πίνακα, οπότε όταν ΕΠΙΛΕΓΕΤΕ COUNT(*) ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ, χρειάζεται μόνο να διαβάσει απευθείας τις αποθηκευμένες τιμές χωρίς να σαρώσει ολόκληρο τον πίνακα.

Ισχύοντα σενάρια

Το MyISAM είναι κατάλληλο για: (1) να κάνετε πολλούς υπολογισμούς μέτρησης. (2) Σπάνια εισαγωγή και πολύ συχνές ερωτήσεις. (3) Δεν υπάρχει επιχείρηση.

Το InnoDB είναι κατάλληλο για: (1) υψηλές απαιτήσεις αξιοπιστίας ή συναλλαγές. (2) Οι ενημερώσεις και τα ερωτήματα του πίνακα είναι αρκετά συχνά και η πιθανότητα κλειδώματος του πίνακα είναι σχετικά υψηλή.

Σύγκριση πινάκων

ΙδιότητεςΤο MyISAMΣωρόςBDBΤο InnoDB
ΣυναλλαγέςΔεν υποστηρίζεταιΔεν υποστηρίζεταιΥποστηρικτήςΥποστηρικτής
Λεπτομέρεια κλειδώματοςΚλειδαριά τραπεζιούΚλειδαριά τραπεζιούΚλείδωμα σελίδας(σελίδα, 8KB)Κλειδαριά
αποθήκευσηΔιαχωρισμός αρχείωνστη μνήμηΈνα αρχείο ανά πίνακαΧώρος τραπεζιού
Επίπεδο απομόνωσηςόχιόχιΔιαβάστε ΔεσμευμένοςΌλα
Φορητή μορφήείμαιΔ/Υόχιείμαι
Πληρότητα παραπομπώνόχιόχιόχιείμαι
Πρωτεύον κλειδί δεδομένωνόχιόχιείμαιείμαι
Η MySQL αποθηκεύει προσωρινά τις εγγραφές δεδομένωνόχιΝαιΝαιΝαι
ευχρηστίαΠλήρης έκδοσηΠλήρης έκδοσηMySQL-ΜέγΠλήρης έκδοση


Μερικές διαφορές στις λεπτομέρειες


1. Το InnoDB δεν υποστηρίζει ευρετήρια τύπου FULLTEXT, τα οποία υποστηρίζονται από την MySQL 5.6 (πειραματική).

2. Το InnoDB δεν αποθηκεύει τον συγκεκριμένο αριθμό σειρών του πίνακα, δηλαδή, κατά την εκτέλεση της επιλογής count() από τον πίνακα, το InnoDB πρέπει να σαρώσει ολόκληρο τον πίνακα για να υπολογίσει πόσες σειρές υπάρχουν, αλλά το MyISAM χρειάζεται μόνο να διαβάσει απλώς τον αριθμό των αποθηκευμένων σειρών. Σημειώστε ότι όταν η δήλωση count() περιέχει μια συνθήκη where, η λειτουργία είναι η ίδια και για τους δύο πίνακες.

3. Για πεδία AUTO_INCREMENT τύπου, το InnoDB πρέπει να περιέχει ένα ευρετήριο μόνο με αυτό το πεδίο, αλλά στον πίνακα MyISAM, μπορείτε να δημιουργήσετε ένα κοινό ευρετήριο με άλλα πεδία.

4. Όταν ΔΙΑΓΡΑΦΗ ΑΠΟ πίνακα, το InnoDB δεν θα δημιουργήσει ξανά τον πίνακα, αλλά θα τον διαγράψει γραμμή προς γραμμή.

5. Η λειτουργία LOAD TABLE FROM MASTER δεν λειτουργεί για το InnoDB, η λύση είναι πρώτα να αλλάξετε τον πίνακα InnoDB στον πίνακα MyISAM, να εισαγάγετε τα δεδομένα και, στη συνέχεια, να τον αλλάξετε στον πίνακα InnoDB, αλλά δεν ισχύει για τον πίνακα που χρησιμοποιεί πρόσθετες δυνατότητες InnoDB (όπως ξένα κλειδιά).

6. Επιπλέον, το κλείδωμα σειράς του πίνακα InnoDB δεν είναι απόλυτο, εάν η MySQL δεν μπορεί να προσδιορίσει το εύρος που θα σαρωθεί κατά την εκτέλεση μιας δήλωσης SQL, ο πίνακας InnoDB θα κλειδώσει επίσης ολόκληρο τον πίνακα.

7. Το InnoDB δεν υποστηρίζει ευρετηρίαση πλήρους κειμένου, ενώ το MyISAM υποστηρίζει. Η ευρετηρίαση πλήρους κειμένου αναφέρεται στη δημιουργία ευρετηρίου αντίστροφης σειράς για κάθε λέξη σε char, varchar και κείμενο (εκτός από τις λέξεις διακοπής). Το ευρετήριο πλήρους κειμένου του MyISAM είναι στην πραγματικότητα άχρηστο, επειδή δεν υποστηρίζει τμηματοποίηση κινεζικών λέξεων και πρέπει να γραφτεί στον πίνακα δεδομένων από τον χρήστη μετά την τμηματοποίηση λέξεων και οι λέξεις με λιγότερους από 4 κινεζικούς χαρακτήρες θα αγνοηθούν όπως οι λέξεις διακοπής.





Προηγούμενος:Συγκεντρώστε πειραματικές ερωτήσεις
Επόμενος:Πρόταση SQL σε τύπο Varchar
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com