Einführung in die MySQL-Datenbank-Engine

1. Was ist eine Datenbank-Engine?

    Eine Datenbank-Engine ist ein Programm oder Programmsegment, das eine Datenbank betreibt und als Kerndienst zum Speichern, Verarbeiten und Schützen von Daten dient.

    Nutzen Sie die Datenbank-Engine, um den Zugriff zu steuern und Transaktionen schnell zu verarbeiten, um den Anforderungen der meisten Anwendungen gerecht zu werden, die große Datenmengen im Unternehmen verarbeiten. Das Datenbankanwendungsprojekt ist über die Datenbank-Engine mit der Datenbank verknüpft.

    Was ist eine Datenbank-Engine? Kurz gesagt ist eine Datenbank-Engine ein Programm, das verschiedene Datenbanken steuert und für die Verarbeitung des gesamten Kernteils der datenbankbezogenen Arbeit verantwortlich ist. In ähnlicher Weise werden die Betriebsanweisungen des Datenbankanwendungsprojekts durch die Verarbeitung der Datenbank-Engine auf die Datenbank angewendet.

    MySQL ist eine häufig verwendete Datenbanksoftware. Es hat viele Vorteile, wie zum Beispiel Open Source, kostenlos und so weiter. Tatsächlich hat es auch eine gute Funktion, nämlich dass Sie aus einer Vielzahl von Motoren wählen können. Die MySQL-Datenbank-Engine hängt davon ab, wie MySQL während der Installation kompiliert wurde. Um eine neue Engine hinzuzufügen, muss MYSQL neu kompiliert werden. In MYSQL werden häufig zwei Engines verwendet: MyISAM und InnoDB .

2、MyISAM

    Vor MySQL 5.5.8 war MyIASM die Standardspeicher-Engine, bot jedoch weder Unterstützung für Datenbanktransaktionen noch Zeilensperren und Fremdschlüssel. Daher muss der Schreibvorgang beim Einfügen oder Aktualisieren von Daten die gesamte Tabelle sperren , was ineffizient ist. Es wird niedriger sein, MyISAM ist hauptsächlich für einige OLAP-Anwendungen (On-Line Analytical Processing) gedacht.

    Im Gegensatz zu Innodb speichert MyIASM jedoch die Anzahl der Zeilen in der Tabelle. Wenn Sie also COUNT(*) FROM TABLE auswählen, müssen Sie nur den gespeicherten Wert direkt lesen, ohne die gesamte Tabelle zu scannen. Wenn die Tabelle weitaus mehr Lesevorgänge als Schreibvorgänge aufweist und keine Datenbanktransaktionsunterstützung erfordert, ist MyIASM ebenfalls eine gute Wahl.

    Darüber hinaus besteht eine weitere Besonderheit von MyISAM darin, dass bei der Pufferung nur Indexdateien und keine Datendateien gepuffert werden, was sich stark von den meisten Datenbanken unterscheidet.

    Die MyISAM-Engine verwendet B+Tree als Indexstruktur und das Datenfeld des Blattknotens speichert die Adresse des Datensatzes. Die Indexmethode von MyISAM wird auch als „non-clustered“ bezeichnet, um sie vom Clustered-Index von InnoDB zu unterscheiden. Die folgende Abbildung ist ein schematisches Diagramm des MyISAM-Primärschlüsselindex:

3、InnoDB

    Ab MySQL 5.5.8 ist InnoDB die Standardspeicher-Engine. Die Innodb-Engine bietet Unterstützung für Datenbank-ACID-Transaktionen und implementiert vier Isolationsstufen des SQL-Standards. Ihr Designziel ist hauptsächlich für OLTP-Anwendungen (On-Line Transaction Processing).

    Die Engine bietet außerdem Zeilensperren und Fremdschlüsseleinschränkungen und unterstützt konsistente, nicht sperrende Lesevorgänge. Ihr Entwurfsziel besteht darin, Datenbanksysteme mit großer Kapazität zu verarbeiten. Tatsächlich handelt es sich um ein vollständiges Datenbanksystem, das auf dem MySQL-Hintergrund basiert. Wenn MySQL ausgeführt wird, wird Innodb wird einen Pufferpool zum Puffern von Daten und Indizes erstellen. Allerdings unterstützt die Engine keine Indizes vom Typ FULLTEXT und speichert nicht die Anzahl der Zeilen in der Tabelle. Bei SELECT COUNT(*) FROM TABLE muss die gesamte Tabelle gescannt werden.

    Diese Engine wird bevorzugt, wenn Datenbanktransaktionen verwendet werden sollen. Aufgrund der geringeren Granularität der Sperre wird beim Schreibvorgang nicht die gesamte Tabelle gesperrt. Wenn die Parallelität hoch ist, verbessert die Verwendung der Innodb-Engine die Effizienz.

    Die Verwendung von Sperren auf Zeilenebene ist jedoch 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.

    Die Indexstruktur der Innodb-Engine ist ebenfalls B+Tree, aber die Indexdatei von Innodb selbst ist eine Datendatei, dh das Datenfeld von B+Tree speichert die tatsächlichen Daten, und dieser Index ist ein Clustered-Index. Der Schlüssel dieses Index ist der Primärschlüssel der Datentabelle, daher ist die InnoDB-Tabellendatendatei selbst der Primärindex.

    Da die Datendateien von InnoDB gemäß dem Primärschlüssel aggregiert werden, erfordert InnoDB, dass die Tabelle über einen Primärschlüssel verfügt (MyISAM verfügt nicht über diesen). Wenn keine explizite Spezifikation vorhanden ist, wählt das MySQL-System automatisch eine Spalte aus, die eindeutig identifiziert werden kann Der Datensatz als Primärschlüssel. Wenn er nicht vorhanden ist Für eine solche Spalte generiert MySQL automatisch ein implizites Feld als Primärschlüssel für die InnoDB-Tabelle. Die Länge dieses Felds beträgt 6 Byte und der Typ ist eine lange Ganzzahl.

    Und im Gegensatz zu MyISAM speichert das Hilfsindex-Datenfeld von InnoDB auch den Wert des entsprechenden Datensatz-Primärschlüssels anstelle der Adresse, sodass bei der Suche mit dem Hilfsindex zuerst der Primärschlüssel basierend auf dem Hilfsindex und dann der tatsächliche gefunden wird Daten basierend auf dem Primärschlüsselindex.

    Daher empfiehlt Innodb nicht, einen zu langen Primärschlüssel zu verwenden, da sonst der Hilfsindex zu groß wird. Es wird empfohlen, ein Feld mit automatischer Inkrementierung als Primärschlüssel zu verwenden, damit jeder Knoten des B+-Baums nacheinander ohne häufige Split-Anpassungen gefüllt wird, was die Effizienz beim Einfügen von Daten effektiv verbessern kann. Der Primärschlüsselindex und der Hilfsindex von Innodb sind in der folgenden Abbildung dargestellt:

 

 

    InnoDB-Tabellen basieren auf Clustered-Indizes. Daher kann der InnoDB-Index eine sehr schnelle Primärschlüssel-Suchleistung bieten. Sein Sekundärindex (Sekundärindex, also Nicht-Primärschlüsselindex) enthält jedoch auch Primärschlüsselspalten. Wenn die Primärschlüsseldefinition also relativ groß ist, sind auch andere Indizes groß. Wenn Sie viele Indizes für die Tabelle definieren möchten, versuchen Sie, den Primärschlüssel so klein wie möglich zu definieren. InnoDB komprimiert keine Indizes. 

4. Der Unterschied zwischen MyISAM und InnoDB

    InnoDB und MyISAM sind die beiden am häufigsten verwendeten Tabellentypen bei der Verwendung von MySQL. Diese beiden Tabellentypen haben je nach spezifischer Anwendung ihre eigenen Vor- und Nachteile.

    Der grundlegende Unterschied besteht darin, dass der MyISAM-Typ keine erweiterte Verarbeitung wie die Transaktionsverarbeitung unterstützt, während der InnoDB-Typ dies unterstützt. Die MyISAM-Typtabelle legt Wert auf Leistung und ihre Ausführung ist schneller als die des InnoDB-Typs, bietet jedoch keine Transaktionsunterstützung, während InnoDB Transaktionsunterstützung und erweiterte Datenbankfunktionen wie externe Schlüssel bereitstellt.

Hier sind einige Details und Implementierungsunterschiede:

(1) InnoDB unterstützt keine Indizes vom Typ FULLTEXT.
(2) InnoDB speichert nicht die spezifische Anzahl von Zeilen in der Tabelle. Das heißt, bei der Ausführung von select count(*) fromtable muss InnoDB zur Berechnung die gesamte Tabelle scannen wie viele Zeilen es gibt, aber MyISAM liest einfach die Anzahl der gespeicherten Zeilen aus. Beachten Sie, dass die Operationen der beiden Tabellen identisch sind, wenn die count(*)-Anweisung Where-Bedingungen enthält.
(3) Für Felder vom Typ AUTO_INCREMENT darf InnoDB nur den Index des Felds enthalten, in MyISAM-Tabellen können Sie jedoch Erstellen ein gemeinsamer Index mit anderen Feldern.
(4) Beim Löschen aus der Tabelle erstellt InnoDB die Tabelle nicht neu, sondern löscht Zeile für Zeile.
(5) Der Vorgang LOAD TABLE FROMMASTER funktioniert für InnoDB nicht. Die Lösung besteht darin, zuerst die InnoDB-Tabelle in eine MyISAM-Tabelle zu ändern und zu importieren Die Daten werden dann in eine InnoDB-Tabelle umgewandelt, sie gilt jedoch nicht für Tabellen, die zusätzliche InnoDB-Funktionen (z. B. Fremdschlüssel) verwenden.
(5) Der Unterschied zwischen dem Hauptindex und der Datendatei von InnoDB selbst ist die Indexdatei, und der Index und die Daten von MyISAM sind getrennt.
(6) Der Unterschied zwischen Hilfsindizes: Das Hilfsindexdatenfeld von InnoDB speichert den Wert des Primärschlüssels des entsprechenden Datensatzes anstelle der Adresse. Der MyISAM-Sekundärindex unterscheidet sich nicht wesentlich vom Primärindex.

    

  • MyISAM ist geeignet für:

(1) Führen Sie viele Zählberechnungen durch;
(2) Fügen Sie selten ein, fragen Sie sehr häufig ab;
(3) Keine Transaktion.

  • InnoDB ist geeignet für:

(1) Transaktionen sind erforderlich;
(2) Tabellenaktualisierungen und -abfragen sind häufig.
(3) Große Datensätze entscheiden sich in der Regel für die InnoDB-Engine, da sie die Transaktionsverarbeitung und Fehlerbehebung unterstützt. Die Größe der Datenbank bestimmt die Dauer der Fehlerwiederherstellung. InnoDB kann Transaktionsprotokolle für die Datenwiederherstellung verwenden, was relativ schnell ist.

Guess you like

Origin blog.csdn.net/wangshiqi666/article/details/130423446