|
MyISAM und InnoDB sind zwei der bekanntesten und am häufigsten verwendeten MySQL-Speicher-Engines. Heute werden wir über den Unterschied zwischen MyISAM und InnoDB in MySQL und die Wahl von ...
Was ist MyISAM?
MyISAM ist die Standard-Speicher-Engine des relationalen Datenbankmanagementsystems MySQL (vor 5.5). Diese MySQL-Tabellenspeicherstruktur erweitert den alten ISAM-Code um viele nützliche Funktionen. In neueren Versionen von MySQL hat die InnoDB-Engine begonnen, MyISAM aufgrund ihrer Vorteile für Transaktionen, referentielle Integrität und höhere Gleichzeitigkeit weitgehend zu ersetzen. Jede MyISAM-Tabelle entspricht drei Dateien auf Ihrer Festplatte. Diese drei Dateien haben denselben Dateinamen, aber unterschiedliche Erweiterungen, um die Art ihrer Verwendung anzugeben: Die .frm-Datei enthält die Tabellendefinition, aber diese Datei ist nicht Teil der MyISAM-Engine, sondern Teil des Servers; .MYD enthält die Tabellendaten; und .MYI ist die Indexdatei für die Tabelle.
Was ist InnoDB?
InnoDB ist eine weitere Speicher-Engine von MySQL, die derzeit der Standard für neue Versionen von MySQL AB ist. Sie ist in allen Binärinstallationen enthalten und ist die Standard-Speicher-Engine nach 5.5. Seine Vorteile gegenüber anderen Speicher-Engines sind die Unterstützung von ACID-konformen Transaktionen (ähnlich wie bei PostgreSQL) und die Parameterintegrität (d.h. Unterstützung von Fremdschlüsseln).
Innobase wurde im Oktober 2005 von der Oracle Corporation übernommen und verwendet eine Lizenz mit doppelter Authentifizierung. Es wird unter der GNU-Distribution vertrieben, die es auch anderen Gruppen, die Innobase in kommerzielle Software einbinden wollen, ermöglicht, eine Lizenz zu erwerben.
Die populäreren Speicher-Engines sind MyISAM und InnoDB. Die Hauptunterschiede zwischen MyISAM und InnoDB liegen in der Leistung und der Transaktionskontrolle. myISAM ist eine erweiterte Implementierung der früheren ISAM (Indexed Sequential Access Method, die von MySQL nach 5.0 nicht mehr unterstützt wird). ISAM wurde entwickelt, um geeignet für den Umgang mit der Häufigkeit der Lesungen ist viel größer als die Häufigkeit der schreibt eine solche Situation, so ISAM und später MyISAM sind nicht als die Dinge zu unterstützen, mit Ausnahme der TPM, müssen nicht auf Transaktionsdatensätze, ISAM Abfrage Effizienz ist beträchtlich, und sehr wenig Speicherverbrauch. MyISAM hat diese Vorteile geerbt und ist gleichzeitig mit der Zeit gegangen, um eine große Anzahl praktischer neuer Funktionen und zugehöriger Tools bereitzustellen. Zum Beispiel sind Sperren auf Tabellenebene vorgesehen, und obwohl MyISAM selbst keine Fehlertoleranz unterstützt, kann die Fehlerbehebung durch myisamchk durchgeführt werden. Da MyISAM für jede Tabelle eigene, unabhängige Speicherdateien (MYD-Datendateien und MYI-Indexdateien) verwendet, ist die Erstellung von Sicherungs- und Wiederherstellungsdateien sehr bequem (Kopieren und Überschreiben ist möglich), aber auch die Online-Wiederherstellung wird unterstützt. Im Vergleich zu anderen Speicher-Engines verfügt MyISAM über die meisten Werkzeuge zur Überprüfung und Reparatur von Tabellen. MyISAM-Tabellen können komprimiert werden und unterstützen die Volltextsuche (Fulltext). Sie sind nicht transaktionssicher und unterstützen keine Fremdschlüssel. Wenn Ihre Anwendung nicht transaktionsorientiert ist und nur grundlegende CRUD-Operationen umfasst, ist MyISAM die richtige Wahl. InnoDB ist für hochgradig gleichzeitige Lese- und Schreibvorgänge konzipiert und verwendet MVCC (Multi-Version Concurrency Control) und Sperrung auf Zeilenebene, um ACID-konforme Transaktionsunterstützung zu bieten. InnoDB unterstützt referenzielle Integrität von Fremdschlüsseln mit Failback-Funktionen. Darüber hinaus ist InnoDB Leistung tatsächlich gut, vor allem im Falle der Verarbeitung großer Datenmengen, mit den offiziellen Worten: InnoDB CPU-Effizienz ist anderen disk-basierten relationalen Datenbank-Speicher-Engine kann nicht verglichen werden. Allerdings, InnoDB Backup-Wiederherstellung, um ein wenig Mühe, es sei denn, Sie verwenden die 4.1 oder spätere Version des Mulit-Tablespace-Unterstützung, weil InnoDB und MyISAM ist anders, seine Daten-Dateien sind nicht unabhängig entsprechend jeder Tabelle. Stattdessen wird ein gemeinsamer Tablespace verwendet, und die einfache Methode des Kopierens und Überschreibens ist darauf nicht anwendbar, und die Daten müssen nach dem Stoppen von MYSQL wiederhergestellt werden. Die Verwendung von Per-Table Tablespacesd, das für jede Tabelle eine eigene Tablespace-Datei hat, ist viel einfacher. InnoDB-Tabellen sind sehr schnell und haben mehr Eigenschaften als BDB. Wenn Sie also eine transaktionssichere Speichermaschine benötigen, ist es empfehlenswert, diese zu verwenden.
Im Allgemeinen ist InnoDB eine gute Wahl, wenn Sie Transaktionsunterstützung benötigen und eine hohe gleichzeitige Lese- und Schreibfrequenz haben. Wenn Sie keine hohe gleichzeitige Lese- und Schreibfrequenz haben, können Sie BDB in Betracht ziehen, aber da die BDB-Unterstützung ab MySQL 5.1 nicht mehr verfügbar ist, ist diese Option nicht mehr verfügbar. Diese Option ist nicht mehr verfügbar.
InnoDB hat Transaktionen standardmäßig eingeschaltet (setzen Sie autocommit = 0), was bedeutet, dass die Tabelle vom Typ InnoDB jedes Mal, wenn ein Datensatz eingefügt wird, als eine separate Transaktion behandelt. Also, wenn wir eingefügt 10.000 Datensätze, und nicht die Transaktion zu schließen, dann InnoDB Art der Tabelle wird es als 10.000 Transaktionen zu behandeln, um mit der Gesamtzeit der Einfügung ist eine Menge von dieser Zeit muss zuerst die Transaktion ausschalten und dann eingefügt, so dass die Geschwindigkeit der Geschwindigkeit der Wie für den Heap und BDB (Berkeley DB), vergleichsweise gesprochen, die Popularität der weniger als Wie für den Heap und BDB (Berkeley DB), relativ gesehen, ist die Popularität nicht so gut wie die ersten beiden, aber in einigen Fällen ist es immer noch recht anwendbar Heap-Speicher-Engine ist es, die Daten im Speicher zu speichern, denn es gibt keine Wartezeit für die Festplatte I / O, die Geschwindigkeit ist extrem schnell. Da es sich jedoch um eine In-Memory-Speicher-Engine, werden alle Änderungen verloren gehen, nachdem der Server neu gestartet wird.Heap ist gut für Testzwecke.BDB ist die erste transaktionssichere Speicher-Engine für MySQL. Sie basiert auf der Berkeley-DB-Datenbankbibliothek und ist ebenfalls transaktionssicher, aber BDB ist deutlich weniger populär als InnoDB, da die meisten Leute, die eine transaktionssichere Speicher-Engine für MySQL suchen, auch nach einer Speicher-Engine suchen, die MVCC oder Locking auf Zeilenebene unterstützt, während BDB nur Page-Level-Lock unterstützt.
InnoDB-Engine
InnoDB ist eine transaktionale Speicher-Engine, die Rollback unterstützt und für hohe Leistung beim Umgang mit großen Datenmengen ausgelegt ist. Sie erstellt zur Laufzeit Pufferpools im Speicher, um Daten und Indizes zu puffern.
Vorteile der InnoDB-Engine
1, Unterstützung für die Transaktionsverarbeitung, ACID-Transaktionsmerkmale;
2, die Implementierung der vier Isolationsebenen des SQL-Standards;
3, Unterstützung für Sperren auf Zeilenebene und Fremdschlüssel-Beschränkungen;
4, Sie können das Transaktionsprotokoll für die Datenwiederherstellung verwenden.
5, die Sperrebene für Zeilensperren, Zeilensperren Vorteil gilt für hohe Gleichzeitigkeit von häufigen Änderungen Tabelle, hohe Gleichzeitigkeit ist besser als MyISAM Leistung.
6, der Index nicht nur Cache selbst, sondern auch Cache-Daten, im Vergleich zu MyISAM erfordert mehr Speicher. Nachteile der InnoDB-Engine
Da es die Anzahl der Zeilen der Tabelle nicht speichert, wird bei der Verwendung von COUNT-Statistiken die gesamte Tabelle gescannt.
MyISAM-Motor
MyISAM ist die Standard-Engine in MySQL vor 5.5.5 und ist für schnelle Lesevorgänge konzipiert.
Vorteile der MyISAM-Engine
1. hohe Leseleistung;
2. da sie die Anzahl der Zeilen in der Tabelle speichert, wird bei der Verwendung von COUNT-Statistiken nicht die gesamte Tabelle durchsucht; MyISAM-Engine-Nachteile
1. Sperrebene für Tabellensperren, Tabellensperren Vorteile sind geringer Overhead, Sperren schnell; Nachteile sind Sperre Granularität, die Wahrscheinlichkeit des Auftretens von Sperren Impulse höher ist, um die Gleichzeitigkeit Fähigkeit ist gering, dieser Motor ist geeignet für Abfrage-basiertes Geschäft.
2, diese Engine unterstützt keine Transaktionen, unterstützt keine Fremdschlüssel.
3, INSERT und UPDATE Operationen müssen die gesamte Tabelle sperren;
4, es speichert die Anzahl der Zeilen der Tabelle, so SELECT COUNT(*) FROM TABLE müssen nur direkt lesen Sie den Wert gespeichert wurde, ohne die Notwendigkeit für eine vollständige Tabelle Scan. Anwendbare Szenarien
MyISAM ist geeignet für: (1) viele Zählberechnungen; (2) seltene Einfügungen und sehr häufige Abfragen; (3) keine Transaktionen.
InnoDB eignet sich für: (1) höhere Anforderungen an die Zuverlässigkeit oder die Notwendigkeit von Transaktionen; (2) Tabellenaktualisierungen und -abfragen sind recht häufig, und die Möglichkeit, Tabellen zu sperren, ist relativ groß.
Vergleich von Tabellen
Attribute | MyISAM | Heap | BDB | InnoDB | Transaktion | Wird nicht unterstützt | Nicht unterstützt | Unterstützt | Unterstützt | Granularität der Sperren | Tabelle Sperren | Tabellensperre | Seitensperre (Seite, 8KB) | Zeilensperre | Speicherung | Geteilte Datei | Im Speicher | Eine Datei pro Tabelle | Tablespace | Isolationsebene | Keine | Keine | Read Committed | Alle | Tragbares Format | Tragbares Format | NICHT ZUTREFFEND | Nein | Nein | Referentielle Integrität | Nein | Nein | Nein | Nein | Daten Primärschlüssel | Nein | Nein | Nein | Nein | MySQL gecachte Datensätze | Nein | Ja | Ja | Ja | Verfügbarkeit | Vollständige Version | Vollversion | MySQL-Max | Vollständige Version |
Einige detaillierte Unterschiede
1) InnoDB unterstützt keinen Index vom Typ FULLTEXT, der von MySQL seit 5.6 (experimentell) unterstützt wird.
2、InnoDB speichert nicht die Anzahl der Zeilen einer Tabelle, d.h. wenn man select count() from table ausführt, muss InnoDB die ganze Tabelle scannen, um zu berechnen, wie viele Zeilen es gibt, aber MyISAM liest einfach die Anzahl der gespeicherten Zeilen aus. Beachten Sie, dass die beiden Tabellenoperationen gleich sind, wenn die count()-Anweisung die where-Bedingung enthält.
3, für ein Feld vom Typ AUTO_INCREMENT muss InnoDB nur den Index des Feldes enthalten, aber in der MyISAM-Tabelle können Sie einen gemeinsamen Index mit anderen Feldern erstellen.
4, DELETE FROM table, InnoDB wird die Tabelle nicht wiederherstellen, sondern Zeile für Zeile löschen.
5, LOAD TABLE FROM MASTER Betrieb funktioniert nicht für InnoDB, ist die Lösung, um zunächst die InnoDB-Tabelle in eine MyISAM-Tabelle zu ändern, importieren Sie die Daten und dann auf InnoDB-Tabelle ändern, aber für die Verwendung von zusätzlichen InnoDB-Funktionen (wie Fremdschlüssel) der Tabelle gilt nicht.
6, Darüber hinaus ist InnoDB Tabelle Zeile sperren nicht absolut, wenn bei der Ausführung einer SQL-Anweisung MySQL kann nicht bestimmen, den Umfang der Scan, InnoDB Tabelle wird auch die gesamte Tabelle sperren.
7, InnoDB unterstützt keine Volltext-Indexierung, während MyISAM Unterstützung. Volltext-Index bezieht sich auf die char, varchar und Text in jedem Wort (mit Ausnahme von deaktivierten Wörtern), um die invertierten Index zu etablieren.MyISAM Volltext-Index ist nicht sinnvoll, weil es nicht das chinesische Wort zu unterstützen, muss durch den Benutzer Wort in den leeren Raum hinzugefügt werden und dann in die Datentabelle zu schreiben, und weniger als 4 chinesische Zeichen werden ignoriert und deaktiviert Worte als das gleiche Wort.
|
Vorherige:Montage Labor FragenNächste:sql-Anweisung im Typ int to varchar
|