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

Benutzerdefinierter Kalendereffekt in JavaScript

In diesem Artikel wird der spezifische Code des b...

So verwenden Sie CocosCreator zur Tonverarbeitung bei der Spieleentwicklung

Inhaltsverzeichnis 1. Grundlagen der Audiowiederg...

Eine kurze Erläuterung temporärer MySQL-Tabellen und abgeleiteter Tabellen

Abgeleitete Tabellen Wenn die Hauptabfrage eine a...

Beispiel zum Hochladen eines Docker-Images in ein privates Repository

Das Image kann problemlos direkt in das öffentlic...

Implementierung der One-Click-TLS-Verschlüsselung für die Docker-Remote-API

Inhaltsverzeichnis 1. Ändern Sie den Port 2375 vo...

Detaillierte Erklärung der CSS-Stylesheets und des Formatlayouts

Stilvorlagen CSS (Cascading Style Sheets) wird zu...

Detaillierte Erklärung der Verwendung von Object.assign() in ES6

Inhaltsverzeichnis 2. Zweck 2.1 Objekten Eigensch...

Einführung in die Installation des Vim-Plugins unter Linux

Inhaltsverzeichnis Installieren Sie den Vim-Plugi...

Zusammenfassung zum Erstellen und Verwenden von Array-Methoden in Bash-Skripten

Definieren eines Arrays in Bash Es gibt zwei Mögl...

Implementierung der MySQL-Datensortierung (aufsteigend und absteigend)

Datensortierung aufsteigend, absteigend 1. Sortie...