1. Welche Zeilenformate gibt es? Sie können Ihre MySQL-Zeilenformateinstellungen wie folgt sehen. Tatsächlich haben MySQL-Datenzeilen zwei Formate, eines ist das in der Abbildung gezeigte Kompaktformat und das andere ist das redundante Format. „Kompakt“ ist ein kompaktes Zeilenformat, das dazu dient, mehrere Datenzeilen auf einer Datenseite zu speichern. Denken Sie darüber nach, es ist so aufregend, mehr Datenzeilen auf einer Datenseite speichern zu können. MySQL liest Daten von der Festplatte in Datenseiten. Wenn wir mehr Zeilen auf einer Datenseite speichern können, würde das nicht weniger Platz verbrauchen und die Gesamteffizienz steigern? Einführung auf der offiziellen Website: Durch die Kompaktheit können Sie im Vergleich zum redundanten Format 20 % Speicherplatz sparen. Compact wurde in MySQL 5.0 eingeführt. Ab MySQL 5.1 ist das Zeilenformat standardmäßig auf Compact eingestellt. Daher wird in diesem Artikel auch das Compact-Format beschrieben. 2. Wie sieht das kompakte Zeilenformat aus? Sie müssen wissen, dass einige Spalten in der Tabelle Nullwerte zulassen und einige Spalten Varchar-Typen mit variabler Länge sind. Wie organisiert und beschreibt das kompakte Zeilenformat diese Informationen? Wie unten dargestellt:
3. Wie viele Daten kann eine einzelne MySQL-Zeile speichern? In den MySQL-Einstellungen kann eine einzelne Datenzeile maximal 65535 Byte Daten speichern (beachten Sie, dass es sich um Bytes und nicht um Zeichen handelt). Beim Erstellen einer Datentabelle wie dieser tritt jedoch ein Fehler auf: MySQL erlaubt es Ihnen nicht, eine Spalte mit einer Länge von 65535 Bytes zu erstellen, da jede Zeile auf der Datenseite die in der obigen Abbildung erwähnte ausgeblendete Spalte hat. Reduzieren Sie daher die Länge von varchar auf 65532 Bytes, um die Tabelle erfolgreich zu erstellen. Beachten Sie, dass sich 65535 hier auf Bytes und nicht auf Zeichen bezieht. Wenn Sie also den Zeichensatz auf UTF-8 ändern, bezieht sich das N in varchar(N) tatsächlich auf N Zeichen und nicht auf N Bytes. Wenn Sie also eine Tabelle wie unten erstellen, wird eine Fehlermeldung angezeigt. Wenn encode=utf8, stellen drei Bytes ein Zeichen dar. Dann 65535 / 3 = 21845 Zeichen. 4. Wie ist das Compact-Format so kompakt? MySQL führt jedes Mal zufällige IO-Lesevorgänge durch Standardmäßig beträgt die Datenseitengröße 16 KB. Eine Datenseite speichert mehrere Zeilen. Bedeutet dies, dass MySQL insgesamt weniger IO-Vorgänge ausführen muss, je mehr Datenzeilen in einer Datenseite gespeichert werden können? Je schneller die Leistung? Die Implementierungsidee des kompakten Formats lautet: Wenn der Spaltentyp VARCHAR, VARBINARY, BLOB oder TEXT ist, werden die Daten in der Spalte, die 768 Byte überschreiten, auf anderen Datenseiten abgelegt. Wie unten dargestellt: Ist Ihnen jetzt die ganze Geschichte klar? Auf diese Weise verhindert MySQL wirksam die Situation, dass eine einzelne Varchar- oder Textspalte zu groß ist, was dazu führt, dass auf einer einzelnen Datenseite zu wenige Zeilendatensätze gespeichert werden, was wiederum zu einem enormen Anstieg der E/A und zur Belegung des Speichers führt. 5. Was ist ein Zeilenüberlauf? Was also ist ein Zeilenüberlauf? Wenn die Standarddatenseitengröße 16 KB beträgt, in Bytes umgerechnet: 16*1024 = 16384 Bytes Ist Ihnen aufgefallen, dass die 16384 Bytes, die eine einzelne Seite speichern kann, ein Vielfaches der maximalen 65535 Bytes sind, die eine einzelne Zeile speichern kann? Mit anderen Worten: Wenn die Datenzeile, die Sie speichern möchten, größer als 65532 Bytes ist, können Sie sie nicht schreiben. Wenn die einzelne Datenzeile, die Sie speichern möchten, kleiner als 65.535 Byte, aber größer als 16.384 Byte ist, können Sie sie erfolgreich einfügen, aber eine Datenseite kann die von Ihnen eingefügten Daten nicht speichern. An dieser Stelle kommt es definitiv zum Überlauf! Tatsächlich tritt in den MySQL-Einstellungen nur dann kein Zeilenüberlauf auf, wenn die Größe 16384 Bytes erreicht. Für Zeilen vom Typ varchar, Text usw. Wenn die Länge eines solchen Spaltenspeichers mehrere Hundert Bytes erreicht, kommt es zu einem Zeilenüberlauf. 6. Wie kommt es zu einem Zeilenüberlauf? Oder schauen Sie sich dieses Bild an: Wenn in den MySQL-Einstellungen die Länge einer Varchar-Spalte 768 Bytes erreicht, werden die ersten 768 Bytes der Spalte als Präfix in der Zeile gespeichert und die überschüssigen Daten werden auf der Überlaufseite gespeichert. Anschließend werden die beiden über einen Offsetzeiger verknüpft. Dies ist der Zeilenüberlaufmechanismus. 7. Überlegen Sie sich eine Frage Ich frage mich, ob Sie jemals über diese Frage nachgedacht haben: Zunächst müssen Sie wissen, dass MySQL den gruppierten Index von B+Tree verwendet. In diesem B+Tree speichern Nicht-Blattknoten nur Indizes, aber keine Daten, während Blattknoten echte Daten speichern. Gleichzeitig verweisen die Blattknoten auf die Datenseiten. Wenn also eine einzelne Zeile nicht gespeichert werden kann, warum speichern Sie sie dann nicht auf zwei Datenseiten? Genau wie auf dem Bild unten. Bei der Einzelknotenspeicherung werde ich mehrere Knoten verwenden, um die Zentrale zu speichern! Vielleicht wird mein B+Tee größer und höher (das ist eigentlich eine falsche Vorstellung) Die zu dieser Fehlerbeschreibung gehörende Gehirnkarte sieht wie folgt aus: Die Gründe, warum MySQL dies nicht tut, sind folgende: Wenn MySQL mehr Datenzeilen auf einer Datenseite speichern möchte, muss es mindestens zwei Datenzeilen speichern. Andernfalls geht die Bedeutung von B+Tree verloren. B+Tree verkommt außerdem zu einer ineffizienten verknüpften Liste. Sie können diesen blauen Satz schätzen. Was er mit „jede Datenseite muss mindestens zwei Datenzeilen speichern“ meinte, ist nicht, dass eine Datenseite nicht nur eine Zeile speichern kann. Sie können buchstäblich nur eine Datenzeile hineinschreiben und dann essen gehen oder etwas anderes tun. Auf dieser Datenseite gibt es immer nur eine Datenzeile. Dies bedeutet, dass beim Schreiben einer Datenzeile auf diese Datenseite ein Überlauf durch den Zeilenüberlaufmechanismus erfolgt, selbst wenn die Datenzeile sehr groß ist und die Grenze der Datenseite erreicht. Es kann weiterhin sichergestellt werden, dass Ihr nächstes Datenelement auf diese Datenseite geschrieben werden kann. Die richtige Mindmap sieht wie folgt aus: siehe: https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
Oben finden Sie eine ausführliche Erläuterung der MySQL-Datenzeilen und des Zeilenüberlaufmechanismus. Weitere Informationen zu MySQL-Datenzeilen und Zeilenüberlauf finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So implementieren Sie Docker, um Parameter dynamisch an Springboot-Projekte zu übergeben
>>: Vier Möglichkeiten zum Ändern des Standard-CSS-Stils von Element-UI-Komponenten in Vue
CSS-Schreibreihenfolge 1. Positionsattribute (Pos...
Inhaltsverzeichnis Anforderungsbeschreibung: Anfo...
Vorwort Bei der Entwicklung eines Projekts stieß ...
Ziehen Sie das Bild # Docker-Pull Codercom/Code-S...
Inhaltsverzeichnis Implementierung einer unregelm...
Inhaltsverzeichnis 1. Index-Grundlagen 1.1 Einlei...
Vorwort Kürzlich trat in der Testumgebung ein Pro...
Die heutigen Bildschirmauflösungen reichen von 32...
In diesem Artikel werden anhand von Beispielen di...
Popup-Nachrichten sind bei inländischen Internetd...
SMIL fügt Unterstützung für Timing und Mediensync...
In diesem Artikel wird der spezifische Code der E...
Wenn das Website-Design bearbeitet oder geändert ...
Best Practices für die Web-Frontend-Optimierung: ...
1. Holen Sie sich den tatsächlichen Pfad des aktu...