Beispielanalyse des Seitenaufteilungsprinzips des MySQL-Clusterindex

Beispielanalyse des Seitenaufteilungsprinzips des MySQL-Clusterindex

Dieser Artikel veranschaulicht anhand eines Beispiels die Seitenaufteilung von MySQL-Clusterindizes. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

In MySQL verwendet MyISAM nicht gruppierte Indizes und die InnoDB-Speicher-Engine verwendet gruppierte Indizes.

Merkmale der Clusterstruktur:

  • Beim Abfragen von Einträgen basierend auf dem Primärschlüssel ist keine Rückkehr zur Zeile erforderlich (die Daten befinden sich unter dem Primärschlüsselknoten).
  • Wenn unregelmäßige Daten eingefügt werden, kommt es häufig zu Seitenaufteilungen.

Warum kommt es zu einer Seitenteilung?

Dies liegt daran, dass der Clusterindex einen ausgeglichenen Binärbaumalgorithmus verwendet und jeder Knoten die Daten der Zeile speichert, die dem Primärschlüssel entspricht. Unter der Annahme, dass der Primärschlüssel der eingefügten Daten selbsterhöhend ist, fügt der Binärbaumalgorithmus die Daten schnell zu einem bestimmten Knoten hinzu, während andere Knoten nicht verschoben werden müssen. Wenn jedoch unregelmäßige Daten eingefügt werden, ändert jede Einfügung den vorherigen Datenstatus des Binärbaums. Dies führt zu Seitenaufteilungen.

prüfen:

Erstellen Sie 2 Tabellen

Tabelle t8 erstellen(
id int Primärschlüssel,
c1 varchar(500),
c2 varchar(500),
c3 varchar(500),
c4 varchar(500),
c5 varchar(500),
c6 varchar(500)
) Engine InnoDB-Zeichensatz UTF8;
Tabelle t9 erstellen(
id int Primärschlüssel,
c1 varchar(500),
c2 varchar(500),
c3 varchar(500),
c4 varchar(500),
c5 varchar(500),
c6 varchar(500)
) Engine InnoDB-Zeichensatz UTF8;

Schreiben Sie ein PHP-Skript, um 10.000 unregelmäßige Primärschlüsseldaten und 10.000 reguläre Primärschlüsseldaten einzufügen und den Unterschied zu sehen.

<?php
Zeitlimit festlegen(0);
$conn = mysql_connect('localhost','root','1234');
mysql_query('test verwenden;');
//Selbstinkrementeller Primärschlüssel $str = str_repeat('a', 500);
$startTime = Mikrozeit(true);
für($i=1;$i<=10000;$i++){
 mysql_query("in t8-Werte einfügen($i,'$str','$str','$str','$str','$str','$str')");
}
$endTime = Mikrozeit(true);
echo $endTime-$startTime.'<br/>';
//Ungeordneter Primärschlüssel $arr = range(1, 10000);
mischen($arr);
$startTime = Mikrozeit(true);
foreach($arr als $i){
 mysql_query("in t9-Werte einfügen($i,'$str','$str','$str','$str','$str','$str')");
}
$endTime = Mikrozeit(true);
echo $endTime-$startTime.'<br/>';

Testergebnisdiagramm

Daten für 10.000 Regeln: 998 Sekunden = 16 Minuten
10.000 unregelmäßige Daten: 1939 Sekunden = 32 Minuten

abschließend:

Der Primärschlüsselwert des gruppierten Indexes sollte ein kontinuierlich ansteigender Wert sein und kein zufälliger Wert (verwenden Sie keine zufällige Zeichenfolge oder UUID), da es sonst zu einer großen Anzahl von Seitenaufteilungen und Seitenverschiebungen kommt. Bei Verwendung von InnoDB lässt es sich am besten wie folgt definieren:

id int unsigned primary key auto_increment

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „Zusammenfassung der Kenntnisse im Bereich MySQL-Indexoperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Allgemeinfunktionen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Protokolloperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Transaktionsoperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-gespeicherte Prozeduren“ und „Zusammenfassung der Kenntnisse im Zusammenhang mit MySQL-Datenbanksperren“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • MySQL-Lernprogramm Clustered Index
  • Detaillierte Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex
  • Grundlegendes zu MySQL-Clusterindizes und wie Clusterindizes wachsen

<<:  Ändern Sie das JVM-Kodierungsproblem, wenn Tomcat ausgeführt wird

>>:  Beispiel für die Implementierung eines globalen Wasserzeichens in Vue

Artikel empfehlen

Tutorial zur mobilen Entwicklung: Zusammenfassung der Pixelanzeigeprobleme

Vorwort Ich bin davon überzeugt, dass bei der Ent...

So legen Sie ein Kennwort für MySQL Version 5.6 auf dem Mac fest

MySQL kann bei der Installation festgelegt werden...

Detaillierte Erläuterung der CSS-Bildspleißtechnologie (Sprite-Bild)

CSS-Bildspleißtechnologie 1. Bildzusammenfügung B...

Die Fallstricke bei der Bereitstellung von Angular-Projekten in Nginx

Wenn man online nach Methoden sucht, um Angular -...

Lösen Sie das MySQL 5.7.9 Version sql_mode=only_full_group_by Problem

MySQL 5.7.9 Version sql_mode=only_full_group_by P...

Beispielerklärung für Ausführungskontext und Ausführungsstapel in JavaScript

JavaScript - Prinzipienreihe Wenn wir in der tägl...

Webdesign-Tipps für Formular-Eingabefelder

1. Gestricheltes Feld, wenn die Abbrechen-Schaltfl...

MySql-Lerntag 03: Verbindungs- und Abfragedetails zwischen Datentabellen

Primärschlüssel: Schlagwort: Primärschlüssel Funk...

Vue+Vant implementiert die obere Suchleiste

In diesem Artikelbeispiel wird der spezifische Co...

Ausführliches Tutorial zur Installation von mysql 5.6.23 winx64.zip

Eine ausführliche Dokumentation zur Installation ...

Zusammenfassung zum Erlernen von Docker-Befehlen in einem Artikel

Inhaltsverzeichnis Einführung Spiegel-Repository ...

Überblick und Einführung in das Linux-Betriebssystem

Inhaltsverzeichnis 1. Was ist ein Betriebssystem?...