Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zufälliger PRIMÄRSCHLÜSSEL für Innodb

MySQL "erneuert" den Index nicht bei jeder Einfügung.

Die Standardseitengröße von MySQL beträgt 16 KB. Es weist diese Seiten in 1-MB-Schritten (sogenannte Extents) zu.

Wenn eine Tabelle zum ersten Mal erstellt wird (Indizes werden neu erstellt), werden die Seiten zu 15/16 gefüllt, sodass Platz für einige zufällige Einfügungen bleibt (1 KB Platz). Wenn Ihre Indexeinträge jeweils 500 Byte groß sind (Primärschlüsselgröße + Zeilendaten für einen gruppierten Index), bleibt Platz für zwei neue Zeilen, die eingefügt werden müssen, bevor die Seite geteilt werden muss.

MySQL behält den Wert des höchsten und niedrigsten Datensatzes im Seitenkopf bei, sodass Datensätze innerhalb eines bestimmten Bereichs auf derselben Seite landen.

Wenn MySQL eine Zeile auf einer ganzen Seite einfügen muss, muss die Seite geteilt werden. MySQL fügt eine neue Seite hinzu und verschiebt die Hälfte der Seitendaten auf die neue Seite.

Innerhalb einer Seite sind Datensätze möglicherweise nicht in physischer Reihenfolge. Sie werden in der Reihenfolge angezeigt, in der sie eingefügt wurden. Sie sind der Reihe nach über eine Art verknüpfte Liste verknüpft. Daher führt selbst eine zufällige Einfügung, abgesehen von der Notwendigkeit, die Seite zu teilen, nicht dazu, dass Daten physisch verschoben werden.

Nach vielen zufälligen Einfügungen werden Ihre Seiten von 1/2 voll bis voll sein. Ein Index mit vielen halbvollen Seiten wirkt sich negativ auf die Leseleistung aus (Sie müssen zwei halbvolle Seiten lesen, um die gleiche Anzahl von Datensätzen zu lesen wie eine 15/16-ganze Seite).

Wenn Sie nun Zeilen in Indexreihenfolge einfügen, fügt MySQL einfach am Ende der Seiten hinzu, füllt sie zu 15/16 voll aus und fügt einen Extent für Seiten hinzu. Viel weniger Leistungseinbußen, da Seiten nicht geteilt werden und somit keine Daten verschoben werden müssen, ganz zu schweigen von den Leseleistungsvorteilen fast ganzer Seiten.

Zufällige Einfügungen erhöhen auch die Fragmentierung der Seiten, was die Leseleistung beeinträchtigen kann, wenn Sie häufig eine große Anzahl aufeinanderfolgender Datensätze lesen (selten).

Außerdem Pufferung ändern kann Sie betreffen.