Was ist InnoDB
und MyISAM
in MySQL
?
Was ist InnoDB
und MyISAM
in MySQL
?
Antworten:
InnoDB
und MYISAM
sind Speicher-Engines für MySQL
.
Diese beiden unterscheiden sich in ihrer Sperrimplementierung: InnoDB
Sperrt die bestimmte Zeile in der Tabelle und MyISAM
sperrt die gesamte MySQL
Tabelle.
Sie können den Typ angeben, indem Sie beim Erstellen einer Tabelle in der Datenbank MYISAM
ODER angeben InnoDB
.
Schau es dir an
InnoDB ist eine Speicher-Engine für MySQL, die standardmäßig in allen aktuellen Binärdateien von MySQL AB enthalten ist. Die Hauptverbesserung gegenüber anderen Speicher-Engines, die für die Verwendung mit MySQL verfügbar sind, ist die ACID-konforme Transaktionsunterstützung
MyISAM ist die Standardspeicher-Engine für die Versionen des relationalen MySQL-Datenbankverwaltungssystems vor 5.5 1 . Es basiert auf dem älteren ISAM-Code, hat aber viele nützliche Erweiterungen. Der Hauptmangel von MyISAM ist das Fehlen von Transaktionsunterstützung. Versionen von MySQL 5.5 und höher wurden auf die InnoDB-Engine umgestellt, um Einschränkungen der referenziellen Integrität und eine höhere Parallelität sicherzustellen.
Sie sind Speichermotoren.
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
MyISAM: Die Standard-MySQL-Speicher-Engine und diejenige, die am häufigsten in Web-, Data Warehousing- und anderen Anwendungsumgebungen verwendet wird. MyISAM wird in allen MySQL-Konfigurationen unterstützt und ist die Standardspeicher-Engine, sofern Sie MySQL nicht so konfiguriert haben, dass standardmäßig eine andere verwendet wird.
InnoDB: Eine transaktionssichere (ACID-kompatible) Speicher-Engine für MySQL mit Commit-, Rollback- und Crash-Recovery-Funktionen zum Schutz von Benutzerdaten. InnoDB-Sperren auf Zeilenebene (ohne Eskalation zu gröberen Granularitätssperren) und konsistente Nonlocking-Lesevorgänge im Oracle-Stil erhöhen die Parallelität und Leistung mehrerer Benutzer. InnoDB speichert Benutzerdaten in Clustered-Indizes, um die E / A für allgemeine Abfragen basierend auf Primärschlüsseln zu reduzieren. Um die Datenintegrität aufrechtzuerhalten, unterstützt InnoDB auch die Einschränkungen der referenziellen Integrität von FOREIGN KEY.
Ich wollte hinzufügen, dass die Möglichkeit, eine bestimmte Speicher-Engine pro Tabelle anzugeben, eine der Hauptstärken von MySQL ist (neben der einfachen Bedienung und der guten Leistung ohne Optimierung). Halten Sie sich für alle Vorgänge, bei denen Transaktionen erforderlich sind, einfach an InnoDB. MyISAM kann jedoch die Dinge wirklich beschleunigen, wenn in bestimmten Situationen keine Transaktionen erforderlich sind - und benötigt im Vergleich zu InnoDB weniger Speicherplatz und RAM.
InnoDB wird jedoch immer besser:
Verbesserungen der Leistung und Skalierbarkeit von InnoDB 1.1
MyISAM folgt ACID nicht im Gegensatz zu InnoDB, das Transaktionen folgt, um die Integrität der Daten aufrechtzuerhalten.
MyISAM unterstützt gleichzeitige Einfügungen: Wenn eine Tabelle keine freien Blöcke in der Mitte der Datendatei enthält, können Sie neue Zeilen einfügen, während andere Threads aus der Tabelle lesen. MySqlDoc
Deshalb ist MyISAM schneller und benötigt weniger Platz. Beispielsweise unterstützt die MySQL MyISAM Storage Engine keine Transaktionen. Einschränkungen von MySQL MYISAM Es gibt ein Bit namens Concurrent-Insert. Standardmäßig ist die Variable auf 1 gesetzt und Concurrent Inserts werden wie oben beschrieben behandelt. Wenn es auf 0 gesetzt ist, sind gleichzeitige Einfügungen deaktiviert. Wenn es auf 2 gesetzt ist, sind gleichzeitige Einfügungen am Ende der Tabelle auch für Tabellen zulässig, in denen Zeilen gelöscht wurden. Eine INSERT-Anweisung kann ausgeführt werden, um Zeilen am Ende der Tabelle mit select gleichzeitig hinzuzufügen, wenn sich in der Mitte der Tabelle keine Löcher / gelöschten Zeilen befinden (zum Zeitpunkt des gleichzeitigen Einfügens).
Die Standardisolationsstufe für mysql InnoDB ist "Read Repeatable". Für MyISAM gibt es keine Transaktion. InnoDB verwendet die Sperre auf Zeilenebene, während MyISAM nur die Sperre auf Tabellenebene verwenden kann. Aus diesem Grund ist die Absturzwiederherstellung in InnoDB besser als in MyISAM. Man muss die Sperre auf Tabellenebene in MyISAM manuell erwerben, wenn man die Parallelitätseffekte vermeiden möchte.
InnoDB ist eine Transaktionsspeicher-Engine von MySQL, während MyISAM eine nicht-Transaktions-Speicher-Engine ist. Mit anderen Worten, InnoDB folgt den ACID-Eigenschaften, um die Integrität der Daten aufrechtzuerhalten, aber MyISAM folgt nicht den ACID-Eigenschaften, wodurch die Integrität der Daten nicht aufrechterhalten werden kann.
In einer InnoDB-Tabelle (Transaktions-Tabelle) können die Transaktionsänderungen leicht rückgängig gemacht werden, wenn ein Rollback erforderlich ist. Änderungen an einer MyISAM-Tabelle (nicht transaktional) können jedoch nicht rückgängig gemacht werden, wenn ein Rollback einer Transaktion erforderlich ist.
Sie möchten beispielsweise Geld von Ihrem Girokonto auf das Sparkonto überweisen. Dies erfolgt durch eine Transaktion, die 5 Abfragen enthält.
1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;
Angenommen, der Prozess stürzt in Schritt 4 ab. Wenn hier eine InnoDB-Tabelle verwendet würde, würde ein Rollback die Änderungen rückgängig machen und Sie würden vor dem Risiko geschützt, Geld zu verlieren. Der Tabelle ist buchstäblich kein Absturz bekannt, da die Änderungen erst dann in die Tabelle übernommen werden, wenn Schritt 5 erfolgreich ausgeführt wurde.
Im Fall einer MyISAM-Tabelle können die Transaktionsänderungen jedoch nicht rückgängig gemacht werden, wenn ein Rollback aufgerufen wird oder wenn ein Absturz zum Ausfall der Transaktion führt. Das heißt, wenn die Transaktion in Schritt 3 abstürzt, wird Geld von Ihrem Girokonto abgebucht. Ihr Sparkonto wäre jedoch nicht mit Geld belastet worden.
Beispiel mit freundlicher Genehmigung: "High Performance MySQL: Optimierung, Backups und Replikation" - Buch von Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev und Vadim Tkachenko
Wenn Ihr MySQL-Server abstürzt, können die Daten aus einer Reihe von MyISAM-Tabellen viel einfacher wiederhergestellt werden als aus dieser großen InnoDB-Transaktionsdatei. Jede MyISAM-Tabelle verfügt über eine separate Datei. Wenn während des Absturzes keine Schreibvorgänge für diese Tabelle ausgeführt wurden, bleibt dies völlig unberührt. Bei InnoDB muss die gesamte Transaktionsdatei des gesamten MySQL-Servers neu indiziert werden oder was auch immer nach einem Absturz geschieht. Das kann ziemlich chaotisch werden.
InnoDB ist die Standardeinstellung NOT myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB ist die Standard-MySQL-Speicher-Engine CREATE TABLE-Anweisung ohne ENGINE = -Klausel erstellt eine InnoDB-Tabelle "