Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der Unterschied zwischen MyISAM und InnoDB?

Die Hauptunterschiede zwischen InnoDB und MyISAM ("in Bezug auf das Entwerfen einer Tabelle oder Datenbank", nach der Sie gefragt haben) sind die Unterstützung für "referenzielle Integrität" und "Transaktionen".

Wenn Sie die Datenbank benötigen, um Fremdschlüsseleinschränkungen zu erzwingen, oder wenn Sie die Datenbank zur Unterstützung von Transaktionen benötigen (d. h. Änderungen, die von zwei oder mehr DML-Vorgängen vorgenommen werden, die als einzelne Arbeitseinheit behandelt werden, wobei alle Änderungen entweder angewendet oder alle Änderungen rückgängig gemacht werden) dann würden Sie die InnoDB-Engine wählen, da diese Funktionen in der MyISAM-Engine fehlen.

Das sind die beiden größten Unterschiede. Ein weiterer großer Unterschied ist die Parallelität. Mit MyISAM erhält eine DML-Anweisung eine exklusive Sperre für die Tabelle, und während diese Sperre gehalten wird, kann keine andere Sitzung eine SELECT- oder DML-Operation für die Tabelle ausführen.

Diese beiden spezifischen Engines, nach denen Sie gefragt haben (InnoDB und MyISAM), haben unterschiedliche Designziele. MySQL hat auch andere Speicher-Engines mit eigenen Designzielen.

Bei der Wahl zwischen InnoDB und MyISAM besteht der erste Schritt also darin, festzustellen, ob Sie die von InnoDB bereitgestellten Funktionen benötigen. Wenn nicht, dann kommt MyISAM in Frage.

Eine ausführlichere Diskussion der Unterschiede ist (in diesem Forum) eher unpraktisch, wenn keine ausführlichere Diskussion des Problembereichs stattfindet ... wie die Anwendung die Datenbank verwenden wird, wie viele Tabellen, Größe der Tabellen, Transaktionslast, Umfang der Auswahl , Insert, Updates, Parallelitätsanforderungen, Replikationsfunktionen usw.

Das logische Design der Datenbank sollte sich auf die Datenanalyse und die Benutzeranforderungen konzentrieren; die Entscheidung, eine relationale Datenbank zu verwenden, würde später kommen, und noch später würde die Wahl von MySQL als Verwaltungssystem für relationale Datenbanken und dann die Auswahl einer Speicher-Engine für jede Tabelle erfolgen.