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

So verwenden Sie Nexus, um JAR-Pakete zu privaten Servern hinzuzufügen

Warum müssen wir einen privaten Nexus-Server erst...

So löschen Sie den MySQL-Dienst vollständig (bereinigen Sie die Registrierung)

Vorwort Beim Installieren der ausführbaren Datei ...

Problem mit Zeitzonenfehler im Docker-Container

Inhaltsverzeichnis Hintergrund Frage Problemanaly...

Mit HTML+CSS3 implementierte Anmeldeschnittstelle

Ergebnisse erzielen Bauen Sie zunächst mit HTML e...

Einführung in die drei wesentlichen Protokolle für MySQL-Datenbankinterviews

Inhaltsverzeichnis 1. Redo-Log (Transaktionsproto...

Schreiben Sie einen formellen Blog mit XHTML CSS

Der vollständige Name von Blog sollte Weblog sein...

Ubuntu startet den Remote-Anmeldevorgang des SSH-Dienstes

SSH-Secure-Shell, ermöglicht sichere Remote-Anmel...

Installieren und Bereitstellen von Java8 und MySQL unter CentOS7

Im Allgemeinen werden Java-Lernprogramme und Bere...

Vue.js-Textfeld mit Dropdown-Komponente

Ein Textfeld mit Dropdown-Liste ermöglicht es Ben...