Unterschiede zwischen MySQL MyISAM und InnoDB

Unterschiede zwischen MySQL MyISAM und InnoDB

Der Unterschied:

1. InnoDB unterstützt Transaktionen, MyISAM jedoch nicht. Bei InnoDB wird jede SQL-Anweisung standardmäßig als Transaktion gekapselt und automatisch festgeschrieben, was sich auf die Geschwindigkeit auswirkt. Daher ist es am besten, mehrere SQL-Anweisungen zwischen Begin und Commit einzufügen, um eine Transaktion zu bilden.

2. InnoDB unterstützt Fremdschlüssel, MyISAM nicht. Die Konvertierung einer InnoDB-Tabelle mit Fremdschlüsseln nach MYISAM schlägt fehl.

3. InnoDB ist ein Clustered-Index und verwendet B+Tree als Indexstruktur. Die Datendatei ist an den (Primärschlüssel-)Index gebunden (die Tabellendatendatei selbst ist eine durch B+Tree organisierte Indexstruktur). Es muss einen Primärschlüssel geben, und die Effizienz des Primärschlüsselindex ist sehr hoch. Der Hilfsindex erfordert jedoch zwei Abfragen: zuerst die Abfrage des Primärschlüssels und dann die Abfrage der Daten über den Primärschlüssel. Daher sollte der Primärschlüssel nicht zu groß sein, denn wenn der Primärschlüssel zu groß ist, sind auch andere Indizes groß.

MyISAM ist ein nicht gruppierter Index und verwendet ebenfalls B+Tree als Indexstruktur. Index- und Datendateien sind getrennt und der Index speichert den Zeiger auf die Datendatei. Der Primärschlüsselindex und die Sekundärindizes sind unabhängig.

Mit anderen Worten, die Blattknoten des Primärschlüsselindex des B + -Baums von InnoDB sind Datendateien und die Blattknoten des Hilfsindex sind die Werte des Primärschlüssels, während die Blattknoten des Primärschlüsselindex und des Hilfsindex des B + -Baums von MyISAM beide Adresszeiger auf Datendateien sind.

4. InnoDB speichert nicht die genaue Anzahl der Zeilen in der Tabelle. Beim Ausführen von select count(*) from table muss die gesamte Tabelle gescannt werden. MyISAM verwendet eine Variable, um die Anzahl der Zeilen in der gesamten Tabelle zu speichern. Wenn Sie die obige Anweisung ausführen, müssen Sie nur die Variable lesen, was sehr schnell ist (beachten Sie, dass keine WHERE-Bedingungen hinzugefügt werden können).

Warum hat InnoDB diese Variable nicht?

Aufgrund der transaktionalen Natur von InnoDB ist die Anzahl der Zeilen in der Tabelle gleichzeitig für verschiedene Transaktionen unterschiedlich. Daher berechnet die Zählstatistik die Anzahl der Zeilen, die für die aktuelle Transaktion gezählt werden können, anstatt die Gesamtzahl der Zeilen für eine schnelle Abfrage zu speichern. InnoDB versucht, den kleinstmöglichen Index zu durchlaufen, sofern der Optimierer es nicht anweist, einen anderen Index zu verwenden. Wenn der sekundäre Index nicht vorhanden ist, versucht InnoDB auch, andere gruppierte Indizes zu durchlaufen.
Wenn sich der Index nicht vollständig im von InnoDB verwalteten Pufferpool befindet, ist der Zählvorgang zeitaufwändig. Sie können eine Tabelle erstellen, die die Gesamtzahl der Zeilen aufzeichnet, und Ihr Programm die entsprechenden Daten während INSERT/DELETE aktualisieren lassen. Wie bei dem oben genannten Problem funktioniert diese Lösung nicht gut, wenn zu diesem Zeitpunkt mehrere Transaktionen stattfinden. Wenn der ungefähre Zeilenwert Ihren Anforderungen entspricht, können Sie SHOW TABLE STATUS ausprobieren.

5. InnoDB unterstützt keine Volltextindizierung, MyISAM hingegen schon. MyISAM ist im Hinblick auf die Abfrageeffizienz im Bereich der Volltextindizierung schneller. PS: InnoDB ab 5.7 unterstützt Volltextindizierung.

6. MyISAM-Tabellen können komprimiert und abgefragt werden

7. InnoDB unterstützt Sperren auf Tabellen- und Zeilenebene (Standard), während MyISAM Sperren auf Tabellenebene unterstützt

Die Zeilensperren von InnoDB werden auf Indizes und nicht auf physischen Zeilendatensätzen implementiert. Die Konsequenz ist, dass wenn der Zugriff nicht auf den Index trifft, die Zeilensperre nicht verwendet werden kann und zu einer Tabellensperre degeneriert.

8. InnoDB-Tabellen müssen einen Primärschlüssel haben (wenn der Benutzer keinen angibt, wird selbst einer gefunden oder generiert). MyISAM hat dagegen keinen.

9. Innodb-Speicherdateien sind frm und ibd, während Myisam frm, MYD, MYI ist

Innodb: frm ist die Tabellendefinitionsdatei, ibd ist die Datendatei

Myisam: frm ist die Tabellendefinitionsdatei, myd ist die Datendatei, myi ist die Indexdatei

So wählen Sie:

1. Ob Transaktionen unterstützt werden. Wenn ja, wählen Sie bitte InnoDB. Wenn nicht, können Sie MyISAM in Betracht ziehen.

2. Wenn die meisten Abfragen in der Tabelle Leseabfragen sind, können Sie MyISAM in Betracht ziehen. Wenn sowohl Lese- als auch Schreibabfragen vorhanden sind, verwenden Sie bitte InnoDB.

3. Nach einem Systemabsturz ist es schwieriger, MyISAM wiederherzustellen. Ist das akzeptabel?

4. Ab MySQL Version 5.5 ist Innodb die Standard-Engine von MySQL (vorher war es MyISAM), was zeigt, dass seine Vorteile für alle offensichtlich sind. Wenn Sie nicht wissen, was Sie verwenden sollen, verwenden Sie InnoDB, es ist zumindest nicht schlecht.

Warum empfiehlt InnoDB die Verwendung der Auto-Increment-ID als Primärschlüssel?

Antwort: Die Auto-Increment-ID stellt sicher, dass der B+-Index bei jeder Einfügung von rechts erweitert wird. Dadurch wird ein häufiges Zusammenführen und Aufteilen von B+-Bäumen vermieden (im Vergleich zur Verwendung von UUID). Wenn Sie Zeichenfolgen-Primärschlüssel und zufällige Primärschlüssel verwenden, werden die Daten zufällig eingefügt, was ineffizient ist.

Vier Hauptfunktionen der InnoDB-Engine

Puffer einfügen, doppeltes Schreiben, adaptiver Hash-Index (ahi), Vorauslesen

Oben finden Sie ausführliche Informationen zum Unterschied zwischen MySQL MyISAM und InnoDB. Weitere Informationen zu MySQL MyISAM und InnoDB finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion über die Indexseitenstruktur, den Einfügepuffer und den adaptiven Hash-Index von InnoDB
  • Zusammenfassung der MySQL InnoDB-Sperren
  • So unterscheiden Sie MySQLs innodb_flush_log_at_trx_commit und sync_binlog
  • Detailliertes Beispiel des MySQL InnoDB-Sperrmechanismus
  • Ausführliche Erläuterung der InnoDB-Sperren in der MySQL-Technologie
  • Ändern Sie die MySQL-Datenbank-Engine in InnoDB
  • Zusammenfassung wichtiger Komponenten von MySQL InnoDB
  • Analyse der Unterschiede zwischen Mysql InnoDB und MyISAM
  • So ermitteln Sie die Höhe des MySQL InnoDB B+-Baums
  • Einstellen der Engine MyISAM/InnoDB beim Erstellen einer Datentabelle in MySQL
  • Hauptfunktionen von MySQL Innodb: Einfügepuffer

<<:  Führen Sie die Schritte aus, um den Fehler 403 Forbidden in Nginx zu beheben.

>>:  Vue implementiert die Verpackung und Verwendung von Komponenten zur Kontrolle der Warenanzahl

Artikel empfehlen

Detaillierte Erklärung zur Interpretation der Nginx-Konfigurationsdatei

Die Nginx-Konfigurationsdatei ist hauptsächlich i...

Vue importiert Echarts, um ein Linienstreudiagramm zu realisieren

In diesem Artikel wird der spezifische Code für d...

js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites

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

Detaillierte Erklärung der Text-Fill-Color-Eigenschaft in CSS3

Was bedeutet Textfüllfarbe? Rein wörtlich bedeute...

IIS7 IIS8 http springt automatisch zu HTTPS (Port 80 springt zu Port 443)

IIS7 muss bestätigen, ob das pseudostatische Modu...

Vertieftes Verständnis davon in JavaScript

Vertieftes Verständnis davon in Js JavaScript Ber...

Detaillierte Erläuterung der Deep Copy und Shallow Copy im JS-Variablenspeicher

Inhaltsverzeichnis Variabler Typ und Speicherplat...

Einführung in die MySQL-Ansicht und Tutorial zur grundlegenden Bedienung

Vorwort Ansicht ist ein sehr nützliches Datenbank...

So teilen Sie Daten in MySQL-Tabellen und -Datenbanken auf

Inhaltsverzeichnis 1. Vertikales (längsseitiges) ...

JavaScript zum Erzielen eines Kalendereffekts

In diesem Artikel wird der spezifische Code für J...

vue $set implementiert die Zuweisung von Werten zu Array-Sammlungsobjekten

Vue $set Array-Sammlungsobjektzuweisung In der be...

Beispielcode zur Implementierung transparenter Verlaufseffekte mit CSS

Die Titelbilder in den Spalten von Zhihu Discover...

Acht Hook-Funktionen in der Vue-Lebenszykluskamera

Inhaltsverzeichnis 1. beforeCreate und erstellte ...