it-swarm.com.de

Was ist der Unterschied zwischen MyISAM und InnoDB?

Ich verstehe, dass diese Frage schon einmal gestellt wurde, aber die meiste Zeit wird sie in Bezug auf eine bestimmte Datenbank oder Tabelle gestellt. Ich kann auf dieser Website keine Antwort finden, die die beiden Motoren und ihre Unterschiede ohne Rücksicht auf eine bestimmte Datenbank beschreibt.

Ich möchte in Zukunft fundiertere Entscheidungen zum Entwerfen einer Tabelle oder Datenbank treffen und suche daher nach einer umfassenden Antwort auf die Unterschiede zwischen den beiden Speicher-Engines.

Was ist der Unterschied zwischen MyISAM und InnoDB , und worauf sollte ich achten, wenn ich mich für das eine oder andere entscheiden möchte?

248
Scott

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

Wenn Sie die Datenbank zur Durchsetzung von Fremdschlüsseleinschränkungen oder zur Unterstützung von Transaktionen benötigen (dh Änderungen, die von zwei oder mehr DML-Operationen vorgenommen wurden, die als einzelne Arbeitseinheit behandelt wurden, wobei alle Änderungen entweder angewendet oder alle Änderungen rückgängig gemacht wurden) Dann würden Sie sich für die InnoDB-Engine entscheiden, da diese Funktionen in der MyISAM-Engine fehlen.

Das sind die beiden größten Unterschiede. Ein weiterer großer Unterschied ist die Nebenläufigkeit. Mit MyISAM erhält eine DML-Anweisung eine exklusive Sperre für die Tabelle. Solange diese Sperre aktiviert ist, kann keine andere Sitzung eine SELECT- oder DML-Operation für die Tabelle ausführen.

Die beiden von Ihnen nachgefragten Engines (InnoDB und MyISAM) haben unterschiedliche Entwurfsziele. MySQL verfügt auch über andere Speicher-Engines mit eigenen Entwurfszielen.

Wenn Sie sich für InnoDB und MyISAM entscheiden, müssen Sie zunächst feststellen, ob Sie die von InnoDB bereitgestellten Funktionen benötigen. Wenn nicht, steht MyISAM zur Diskussion.

Eine detailliertere Erörterung von Unterschieden ist (in diesem Forum) eher unpraktisch, es fehlt eine detailliertere Erörterung des Problembereichs ... wie die Anwendung die Datenbank verwenden wird, wie viele Tabellen, Größe der Tabellen, Transaktionslast, Volumen von select , Einfügen, Aktualisieren, Parallelitätsanforderungen, Replikationsfunktionen usw.


Das logische Design der Datenbank sollte auf Datenanalyse und Benutzeranforderungen ausgerichtet sein. Die Wahl für die Verwendung einer relationalen Datenbank würde später und noch später die Wahl von MySQL als relationales Datenbankverwaltungssystem und dann die Auswahl einer Speicher-Engine für jede Tabelle fallen.

409
spencer7593

MYISAM:

  1. MYISAM unterstützt das Sperren auf Tabellenebene
  2. MyISAM ist auf Geschwindigkeit ausgelegt
  3. MyISAM unterstützt keine Fremdschlüssel, daher rufen wir MySQL mit MYISAM is DBMS auf
  4. MyISAM speichert seine Tabellen, Daten und Indizes auf der Festplatte in drei verschiedenen Dateien. (Tabellenname.FRM, Tabellenname.MYD, Tabellenname.MYI)
  5. MYISAM unterstützt keine Transaktion. Sie können mit MYISAM kein Commit und kein Rollback durchführen. Sobald Sie einen Befehl eingegeben haben, ist er erledigt.
  6. MYISAM unterstützt die Volltextsuche
  7. Sie können MyISAM verwenden, wenn die Tabelle mit viel Auswahl und weniger Aktualisierungs- und Löschvorgängen statischer ist.

INNODB:

  1. InnoDB unterstützt das Sperren auf Zeilenebene
  2. InnoDB wurde für maximale Leistung bei der Verarbeitung großer Datenmengen entwickelt
  3. InnoDB unterstützt Fremdschlüssel, daher nennen wir MySQL mit InnoDB ist RDBMS
  4. InnoDB speichert seine Tabellen und Indizes in einem Tablespace
  5. InnoDB unterstützt die Transaktion. Sie können mit InnoDB ein Commit und ein Rollback durchführen
337
medina