Zusammenfassung der Unterschiede zwischen den MySQL-Speicher-Engines MyISAM und InnoDB

Zusammenfassung der Unterschiede zwischen den MySQL-Speicher-Engines MyISAM und InnoDB

1. Änderungen in der Standard-Speicher-Engine von MySQL

In Versionen vor MySQL 5.1 ist MyISAM die Standardsuchmaschine. Ab MySQL 5.5 und höher wird die Standardsuchmaschine auf InnoDB geändert.

2. Hauptfunktionen der Speicher-Engines MyISAM und InnoDB

Die Funktionen der MyISAM-Speicher-Engine: Sperren auf Tabellenebene, keine Unterstützung für Transaktionen und Volltextindizes, wodurch sie für einige CMS-Content-Management-Systeme als Backend-Datenbanken geeignet ist. Die Tabellensperrstruktur reicht jedoch für Produktionssysteme mit hoher Parallelität und hoher Belastung nicht aus.

Im Folgenden sind die Funktionen der MySQL 5.7 MyISAM-Speicher-Engine aufgeführt:

Die Funktionen der InnoDB-Speicher-Engine sind: Zeilensperren, Transaktionssicherheit (ACID-Kompatibilität), Unterstützung für Fremdschlüssel und Unterstützung für Indizes vom Typ FULLTEXT (Indizes vom Typ FULLTEXT werden ab Version 5.6.4 unterstützt). Die InnoDB-Speicher-Engine bietet eine transaktionssichere Speicher-Engine mit Commit-, Rollback- und Crash-Recovery-Funktionen. InnoDB ist auf maximale Leistung bei der Verarbeitung großer Datenmengen ausgelegt. Seine CPU-Effizienz wird wahrscheinlich von keiner anderen festplattenbasierten relationalen Datenbank-Engine erreicht.

Im Folgenden sind die Funktionen der MySQL 5.7 InnoDB-Speicher-Engine aufgeführt:

Beachten:

Die Zeilensperre der InnoDB-Tabelle ist nicht absolut. Wenn MySQL beim Ausführen einer SQL-Anweisung den zu scannenden Bereich nicht bestimmen kann, sperrt die InnoDB-Tabelle auch die gesamte Tabelle, z. B. update table set num=1 where name like “a%” .

Der Hauptunterschied zwischen den beiden Typen besteht darin, dass InnoDB Transaktionen, Fremdschlüssel und Zeilensperren unterstützt. MyISAM unterstützt dies nicht. Daher wird MyISAM oft einfach als nur für den Einsatz in kleinen Projekten geeignet angesehen.

3. MyISAM- und InnoDB-Leistungstest

Die folgenden beiden Bilder sind die offiziellen Stresstestergebnisse von MyISAM und InnoDB

Es ist ersichtlich, dass der Durchsatz von InnoDB mit zunehmender Anzahl von CPU-Kernen besser wird, während der Durchsatz von MyISAM nahezu unverändert bleibt. Offensichtlich verringert der Tabellensperrmechanismus von MyISAM den Lese- und Schreibdurchsatz.

4. Ob Transaktionen unterstützt werden

MyISAM ist eine nicht transaktionale Engine, die es MySQL mit der MyISAM-Engine ermöglicht, Hochgeschwindigkeitsspeicherung und -abruf sowie Volltextsuchfunktionen bereitzustellen, wodurch es sich für Anwendungen mit häufigen Abfragen wie Data Warehouses eignet;

InnoDB ist transaktionssicher;

Transaktionen sind eine erweiterte Verarbeitungsmethode. Wenn beispielsweise beim Hinzufügen, Löschen oder Ändern von Spalten ein Fehler auftritt, kann die Transaktion zurückgesetzt und wiederhergestellt werden. Dies ist mit MyISAM jedoch nicht möglich.

5. Der Unterschied zwischen MyISAM und InnoDB in der Struktur

(1) Jedes MyISAM wird in drei Dateien auf der Festplatte gespeichert:

Der Name der ersten Datei beginnt mit dem Namen der Tabelle und die Erweiterung gibt den Dateityp an. Die .frm-Datei speichert die Tabellendefinition.
Die zweite Datei ist eine Datendatei mit der Erweiterung .MYD (MYData).
Die dritte Datei ist die Indexdatei mit der Erweiterung .MYI (MYIndex).

(2) Festplattenbasierte Ressourcen sind die Datendatei des InnoDB-Tablespace und seine Protokolldatei. Die Größe der InnoDB-Tabelle wird nur durch die Größe der Betriebssystemdatei begrenzt, die im Allgemeinen 2 GB beträgt.

6. Erläuterung der MyISAM- und InnoDB-Tabellensperren und Zeilensperren

MySQL-Sperren auf Tabellenebene haben zwei Modi: gemeinsame Lesesperre für die Tabelle (Table Read Lock) und exklusive Schreibsperre für die Tabelle (Table Write Lock). Was bedeutet das? Es bedeutet, dass beim Lesen einer MyISAM-Tabelle die Leseanforderungen anderer Benutzer für dieselbe Tabelle nicht blockiert werden, Schreibvorgänge für dieselbe Tabelle jedoch blockiert werden. Schreibvorgänge für die MyISAM-Tabelle blockieren wiederum die Lese- und Schreibvorgänge anderer Benutzer für dieselbe Tabelle.

InnoDB-Zeilensperren werden durch das Sperren von Indexelementen implementiert, d. h. InnoDB verwendet Zeilensperren nur, wenn Daten über Indexbedingungen abgerufen werden, andernfalls verwendet es Tabellensperren! Sperren auf Zeilenebene verbrauchen bei jedem Sperrenerwerb und jeder Sperrenfreigabeoperation mehr Ressourcen als Tabellensperren. Wenn es zu einem Deadlock zwischen zwei InnoDB-Transaktionen kommt, wird die Anzahl der von jeder Transaktion betroffenen Zeilen berechnet und anschließend die Transaktion mit weniger Zeilen zurückgesetzt. Wenn InnoDB nicht am Sperrszenario beteiligt ist, kann InnoDB es nicht erkennen. Dies kann nur durch eine Sperrzeitüberschreitung gelöst werden.

7. Ob die bestimmte Anzahl von Zeilen in der Datenbanktabelle gespeichert werden soll

InnoDB speichert nicht die genaue Anzahl der Zeilen in der Tabelle. Das heißt, wenn select count(*) from table ausgeführt wird, muss InnoDB die gesamte Tabelle durchsuchen, um die Anzahl der Zeilen zu berechnen, während MyISAM einfach die gespeicherte Anzahl der Zeilen liest.

Beachten Sie, dass der Vorgang für beide Tabellen gleich ist, wenn count(*) -Anweisung where -Bedingung enthält. Dies ist der Fall, wenn InnoDB Tabellensperren verwendet, wie oben unter „6“ vorgestellt.

8. Wie man wählt

MyISAM ist geeignet für:

  • (1) Führen Sie viele Zählberechnungen durch;
  • (2) Einfügungen sind selten, Abfragen jedoch häufig. Wenn eine große Anzahl von SELECTs ausgeführt wird, ist MyISAM die bessere Wahl.
  • (3) Keine Transaktionen.

InnoDB eignet sich für:

  • (1) Es werden hohe Anforderungen an die Zuverlässigkeit der Transaktionen gestellt.
  • (2) Wenn Tabellenaktualisierungen und Abfragen häufig sind und eine hohe Wahrscheinlichkeit einer Tabellensperre besteht, geben Sie die Erstellung einer Daten-Engine an.
  • (3) Wenn Ihre Daten eine große Anzahl von INSERTs oder UPDATEs durchführen, sollten Sie aus Leistungsgründen InnoDB-Tabellen verwenden;
  • (4) Wenn DELETE FROM table verwendet wird, erstellt InnoDB die Tabelle nicht neu, sondern löscht die Zeilen einzeln.
  • (5) Die Operation LOAD TABLE FROM MASTER funktioniert nicht für InnoDB. Die Lösung besteht darin, die InnoDB-Tabelle zunächst in eine MyISAM-Tabelle umzuwandeln und sie nach dem Importieren der Daten wieder in eine InnoDB-Tabelle umzuwandeln. Dies gilt jedoch nicht für Tabellen, die zusätzliche InnoDB-Funktionen (wie etwa Fremdschlüssel) verwenden.

Beachten Sie, dass der Code zum Erstellen jeder Tabelle identisch ist, mit Ausnahme des TYPE-Parameters am Ende, der die Daten-Engine angibt.

Weitere Unterschiede:

1. Für Felder vom Typ AUTO_INCREMENT muss InnoDB einen Index enthalten, der nur dieses Feld hat, aber in einer MyISAM-Tabelle kann ein gemeinsamer Index mit anderen Feldern erstellt werden.

2. Wenn DELETE FROM-Tabelle verwendet wird, erstellt InnoDB die Tabelle nicht neu, sondern löscht die Zeilen einzeln.

3. Die Operation LOAD TABLE FROMMASTER funktioniert nicht für InnoDB. Die Lösung besteht darin, die InnoDB-Tabelle zunächst in eine MyISAM-Tabelle umzuwandeln und sie nach dem Importieren der Daten wieder in eine InnoDB-Tabelle umzuwandeln. Dies gilt jedoch nicht für Tabellen, die zusätzliche InnoDB-Funktionen verwenden (z. B. Fremdschlüssel).

4. Die InnoDB-Speicher-Engine ist vollständig in den MySQL-Server integriert. Die InnoDB-Speicher-Engine verwaltet ihren eigenen Pufferpool zum Zwischenspeichern von Daten und Indizes im Hauptspeicher.

5. Für selbstinkrementierende Felder muss InnoDB einen Index nur für dieses Feld enthalten, aber es kann ein gemeinsamer Index mit anderen Feldern in einer MyISAM-Tabelle erstellt werden.

6. Beim Löschen der gesamten Tabelle löscht InnoDB die Zeilen einzeln, was sehr langsam ist. MyISAM wird die Tabelle neu erstellen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Einführung in MySQL-Isolationsebene, Sperre und MVCC
  • Einstellen der Engine MyISAM/InnoDB beim Erstellen einer Datentabelle in MySQL
  • Umfassende Analyse von optimistischer Sperre, pessimistischer Sperre und MVCC in MySQL
  • Detaillierte Erläuterung der Speicherverwaltung der MySQL InnoDB-Speicher-Engine
  • Detaillierte Erläuterung verschiedener Sperren in der InnoDB-Speicher-Engine in MySQL
  • Detaillierte Erläuterung der Datenseitenstruktur der InnoDB-Speicher-Engine von MySQL
  • MySQL-Speicher-Engines InnoDB und MyISAM
  • Implementierungsprinzip der MVCC-Sperre der MySQL-Datenbank Innodb-Engine

<<:  Detailliertes Tutorial zur Installation von VirtualBox und Ubuntu 16.04 unter Windows

>>:  JS implementiert das Auf- und Abgleiten auf dem mobilen Endgerät, jeweils einen Bildschirm nach dem anderen

Artikel empfehlen

Datenbankabfrageoptimierung: Unterabfrageoptimierung

1. Fall Nehmen Sie alle Mitarbeiter, die nicht Fi...

js, um einen einfachen Kalendereffekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

Analyse von MySQL-Beispielen für doppelte und redundante Indizes

In diesem Artikel werden MySQL-Duplikatsindizes u...

So erstellen Sie ein einfaches Säulendiagramm mit Flex-Layout in CSS

Das Folgende ist ein Balkendiagramm im Flex-Layou...

HTML-Code, der den Internet Explorer zum Einfrieren bringen kann

Wir müssen lediglich einen beliebigen Texteditor ö...

Vier Methoden zur Datentypbeurteilung in JS

Inhaltsverzeichnis 1. Art von 2. Instanz von 3. K...

Lösen Sie das Problem ungültiger UTF8-Einstellungen in MySQL 5.6

Nach der Dekomprimierung der grünen Version von m...

20 CSS-Codierungstipps für mehr Effizienz (sortiert)

In diesem Artikel möchten wir eine Sammlung von 2...

Implementierungsmethode für die bidirektionale Bindung von Vue-Daten

Inhaltsverzeichnis 1. Einleitung 2. Code-Implemen...