Was ist InnoDB und MyISAM in MySQL?


121

Was ist InnoDBund MyISAMin MySQL?


8
Duplikat von MySql: MyISAM vs. Inno DB! , oder Sie können Ihre Wahl treffen
OMG Ponys

Es ist die Datenbank-Engine ... kavoir.com/2009/09/…
Matthieu

Können wir beide Speicher-Engines gleichzeitig für unsere Datenbank verwenden?
user130561

1
Sie können sie gleichzeitig auf verschiedenen Tabellen, aber für eine bestimmte Tabelle müssen Sie auswählen, welche Sie verwenden möchten ...
Matthieu

Antworten:


110

InnoDBund MYISAMsind Speicher-Engines für MySQL.

Diese beiden unterscheiden sich in ihrer Sperrimplementierung: InnoDBSperrt die bestimmte Zeile in der Tabelle und MyISAMsperrt die gesamte MySQLTabelle.

Sie können den Typ angeben, indem Sie beim Erstellen einer Tabelle in der Datenbank MYISAMODER angeben InnoDB.


Klare und einfache Antwort.
Vadiraj Jahagirdar

38

Schau es dir an

InnoDB und MyISAM

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.


1
Können wir beide Speicher-Engines gleichzeitig für unsere Datenbank verwenden?
user130561

2
Sie können, weil Sie für jede Tabelle eine andere Speicher-Engine definieren können. Eine andere Frage ist, ob Sie sollten. In der MySQL-Dokumentation finden Sie einige Erklärungen zu diesem Thema.
Nano7

18

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.


Müssen wir bei der Installation von MySQL speziell angeben, welche Speicher-Engine als MySQL-Datenbank verwendet werden soll?
user130561

3
Wie in meinem Beitrag erwähnt, ist der Standard MyISAM. Wenn Sie die Funktionen einer anderen Speicher-Engine wie INNODB verwenden möchten, müssen Sie dies angeben. Dies erfolgt nicht während der Installation, sondern während der ersten Tabellenerstellung.
mluebke

3
Aber wie folgt : - dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; Die Standard-Engine ist InnoDB.
Harsha

2
Laut dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : "Die Standard-Engine ist InnoDB ab MySQL 5.5.5 (MyISAM vor 5.5.5)." Die Standard-Engine ist jetzt InnoDB. Diese Antwort wurde 16 Tage nach der ersten allgemeinen Verfügbarkeitsversion mit InnoDB als Standard-Engine veröffentlicht;)
SOFe

6

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


4

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.


3

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


1

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.