Regeln für die Verwendung gemeinsamer MySQL-Indizes

Regeln für die Verwendung gemeinsamer MySQL-Indizes

Ein gemeinsamer Index wird auch als zusammengesetzter Index bezeichnet. Für zusammengesetzte Indizes gilt: MySQL verwendet die Felder im Index von links nach rechts. Eine Abfrage kann nur einen Teil des Index verwenden, aber nur den äußersten linken Teil. Beispielsweise ist der Index der Schlüsselindex (a,b,c). Er unterstützt die Suche nach drei Kombinationen von a | a,b | a,b,c, aber nicht die Suche nach b,c. Wenn das äußerste linke Feld eine konstante Referenz ist, ist der Index sehr effektiv.

Beginnen wir mit einer interessanten Frage:

Angenommen, eine Tabelle hat einen gemeinsamen Index (c1, c2, c3, c4). Welche Felder verwenden den Index?
A wobei c1=x und c2=x und c4>x und c3=x
B wobei c1=x und c2=x und c4=x, sortiert nach c3
C, wobei c1 = x und c4 = x, gruppiert nach c3, c2
D, wobei c1=? und c5=?, sortiert nach c2,c3
E wobei c1=? und c2=? und c5=? sortiert nach c2,c3

Lasst uns anfangen:

Erstellen Sie zuerst die Tabelle:

TABELLE ERSTELLEN t(
c1 CHAR(1) ungleich null,
c2 CHAR(1) ungleich null,
c3 CHAR(1) ungleich null,
c4 CHAR(1) ungleich null,
c5 CHAR(1) nicht null
)ENGINE myisam CHARSET UTF8;


Es gibt 5 Felder von c1 bis c5. Beachten Sie, dass die Feldtypen alle char(1)-Typen mit fester Länge sind und nicht leer sind. Der Zeichensatz ist utf8 (bezogen auf die Anzahl der Bytes, die zur Berechnung des Index verwendet werden).

Erstellen Sie einen Index:

Tabelle ändern, Index c1234 (c1, c2, c3, c4) hinzufügen;

2 Datensätze einfügen: insert into t VALUES('1','1','1','1','1'),('2','2','2','2','2')

Verwenden Sie MySql Explain, um mit der Analyse der Ergebnisse der Frage zu beginnen:

Option A:


Wie aus den Ergebnissen ersichtlich ist, verwenden c1, c2, c3 und c4 alle den Index, und wir ändern das Ergebnis von A leicht:

Nach dem Entfernen der Bedingung c2:


Gemäß dem Prinzip des ganz linken Index verwendet das Feld c2 keinen Index und die Felder nach c2 können keinen Index verwenden. In den folgenden beiden Abbildungen vergleichen wir das Prinzip des Index ganz links:


Die Ergebnisse in der obigen Abbildung zeigen, dass die direkte Verwendung von c3 eine vollständige Tabellenabfrage ist und der Index nicht verwendet werden kann. Daher ist die Voraussetzung für die Verwendung des Index für das Feld c3, dass sowohl die Felder c1 als auch c2 Indizes verwenden.

Dies ist das Prinzip des äußersten linken Teils des Index (Prinzip des linken Präfixes).

Option B:


Die Länge key_len gibt an, dass der Index in den Feldern c1 und c2 verwendet wird. Extra zeigt an, dass keine temporäre Tabelle zum Sortieren verwendet wird, was bedeutet, dass der Index zum Sortieren verwendet wird, aber nicht im Wert key_len berechnet wird und nicht dem Zweck dient, eine Verbindung zu c4 herzustellen, was bedeutet, dass der Index bei c3 unterbrochen ist.

Tatsächlich erfolgt die Sortierung direkt unter Verwendung des gemeinsamen Indexes, d. h. unter Verwendung des gemeinsamen Indexes c1234 sind c2 unter c1, c3 unter c2 und c4 unter c3 bereits in der richtigen Reihenfolge. Die Sortierung verwendet also tatsächlich den Index, aber das Feld c3 verwendet den Index nicht. (Ich habe mich beim Schreiben dieses Absatzes immer etwas unwohl gefühlt. Ich weiß nicht, ob ich ihn richtig verstehe. Er muss noch weiter erforscht werden.)

Option C:


Bei Verwendung von „Gruppieren nach“ wird normalerweise zuerst eine temporäre Datei generiert und dann sortiert. Wenn die Feldreihenfolge jedoch c2, c3 ist, wird die temporäre Tabelle nicht zum Sortieren verwendet, sondern der Index zum Sortieren. Wenn die Gruppierungsfelder c3, c2 sind, wird der Index nicht zum Gruppieren und Sortieren verwendet, da die Reihenfolge nicht mit der Indexfeldreihenfolge übereinstimmt.

Bestimmt durch die key_len-Länge, verwendet nur das Feld c1 den Index.

Option D:


order by ähnelt group by. Wenn die Feldreihenfolge mit dem Index übereinstimmt, wird der Index zum Sortieren verwendet; wenn die Feldreihenfolge nicht mit dem Index übereinstimmt, wird der Index nicht verwendet.

Bestimmt durch die key_len-Länge, verwendet nur das Feld c1 den Index.

Option E:


Tatsächlich wurde die Ergebnisanalyse der Option E in den Ergebnissen von ABCD oben analysiert. Hier verwenden nur die Felder c1 und c2 diesen Index.

Um die Antworten auf die obigen Fragen zusammenzufassen:

A: Alle vier Felder verwenden diesen Index.

B: Die Felder c1 und c2 verwenden diesen Index

Das Feld C:c1 verwendet diesen Index

Das Feld D:c1 verwendet diesen Index

E: Die Felder c1 und c2 verwenden diesen Index.

Zusammenfassen:

Das Prinzip des äußersten linken Präfixes (Prinzip des linken Präfixes) des Index, wie z. B. der gemeinsame Index von (c1, c2, c3, c4...cN), die Where-Bedingung wird in der Reihenfolge der Felder verwendet, in denen der Index erstellt wird (das bedeutet nicht, dass die And-Bedingung in der Reihenfolge geschrieben werden muss). Wenn für eine Spalte in der Mitte keine Bedingung vorhanden ist oder Like verwendet wird, können die nachfolgenden Spalten den Index nicht verwenden.

Indizes können auch zum Gruppieren und Sortieren verwendet werden. Beim Gruppieren muss zuerst sortiert werden, dann wird der Durchschnitt berechnet usw. Daher kann beim Gruppieren und Sortieren die geordnete Natur des Index ausgenutzt werden, sofern die Reihenfolge der Felder der Reihenfolge der indizierten Felder folgen kann.

Dies ist das Ende dieses Artikels über die Nutzungsregeln für MySQL-Gemeinschaftsindizes. Weitere relevante MySQL-Gemeinschaftsindexinhalte finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySQL-unabhängiger Index und gemeinsame Indexauswahl
  • Implementierung eines MySQL-Gemeinschaftsindex (zusammengesetzter Index)
  • Detaillierte Analyse des ganz links stehenden Übereinstimmungsprinzips des MySQL-Gemeinschaftsindex
  • Analyse der gemeinsamen Indexfunktion von MySQL und Anwendungsbeispiele
  • Beispiele für die Verwendung gemeinsamer MySQL-Indizes
  • Tutorial zum gemeinsamen Indexlernen in MySQL
  • Gemeinsame MySQL-Indexwirksamkeitsbedingungen und Indexungültigkeitsbedingungen

<<:  CSS-Hacks \9 und \0 funktionieren möglicherweise nicht zum Hacken von IE11\IE9\IE8

>>:  Iframe-Parameter mit Anweisungen und Beispielen

Artikel empfehlen

Lösen Sie das Problem des unzureichenden Docker-Festplattenspeichers

Nachdem der Server, auf dem sich Docker befindet,...

Einige „Fallstricke“ beim Upgrade der MySQL-Datenbank

Bei kommerziellen Datenbanken hat die Datenbankak...

Win10 Docker-Toolsbox-Tutorial zum Erstellen einer PHP-Entwicklungsumgebung

Bild herunterladen Docker-Pull MySQL:5.7 docker p...

HTML+CSS zum Erreichen eines Surround-Reflexionsladeeffekts

In diesem Artikel wird hauptsächlich die Implemen...

Tabellenbezogene Anordnung und Javascript-Operationen table, tr, td

Gut funktionierende Einstellungen für Tabelleneige...

Eine kurze Analyse des Unterschieds zwischen ref und toRef in Vue3

1. ref wird kopiert, die Ansicht wird aktualisier...

Detaillierte Erklärung zur Verwendung von nohup /dev/null 2>&1

Befehl „nohup“: Wenn Sie einen Prozess ausführen ...

Lösung für das Problem mit verstümmelten chinesischen MySQL-Zeichen

1. Die chinesischen verstümmelten Zeichen erschei...

Vue führt eine Überprüfung durch, ob der Benutzername verfügbar ist

In diesem Artikelbeispiel wird der spezifische Co...

Beispiel für asynchronen Dateiupload in HTML

Code kopieren Der Code lautet wie folgt: <form...

Anweisungen zum Erlernen von Vue

Inhaltsverzeichnis 1. v-Text (v-Befehlsname = „Va...

Beispielcode zum Bereitstellen von ELK mit Docker-Compose

Umfeld Host-IP 192.168.0.9 Docker-Version 19.03.2...

So exportieren und importieren Sie SQL-Dateien unter einem Linux-Befehl

Dieser Artikel beschreibt, wie Sie SQL-Dateien mi...

Eine dauerhafte Lösung für MySQLs Unfähigkeit, Chinesisch zu erkennen

In den meisten Fällen unterstützt MySQL Chinesisc...