MySQL verwendet einen abdeckenden Index, um Tabellenrückgaben zu vermeiden und die Abfrage zu optimieren

MySQL verwendet einen abdeckenden Index, um Tabellenrückgaben zu vermeiden und die Abfrage zu optimieren

Vorwort

Bevor wir über den Deckungsindex sprechen, müssen wir zunächst seine Datenstruktur verstehen: B+-Baum.

Erstellen Sie zunächst zur Demonstration eine Tabelle (der Einfachheit halber wird die ID der Reihe nach erstellt):

Ausweis Name
1 ein
3 k
5 op
8 ein
10 k.k.
11 k
14 jk
16 ml
17 mn
18 k
19 k
zweiundzwanzig hj
vierundzwanzig io
25 vg
29 jk
31 jk
33 rt
34 danke
35 du
37 rt
39 rt
41 danke
45 qt
47 danke
53 qi
57 gh
61 dh

Der B+-Baumindex, der mit anderen Spaltenwerten als dem Primärschlüssel als Schlüsselwerte erstellt wird, wird als nicht gruppierter Index bezeichnet.

Der Unterschied zwischen einem nicht gruppierten Index und einem gruppierten Index besteht darin, dass die Blattknoten eines nicht gruppierten Index nicht die Daten in der Tabelle speichern, sondern den der Spalte entsprechenden Primärschlüssel. Wenn wir Daten finden möchten, müssen wir auch im gruppierten Index basierend auf dem Primärschlüssel suchen. Dieser Vorgang der Datensuche basierend auf dem gruppierten Index wird als Tabellenrückgabe bezeichnet.

B+ Baum

B+-Baum und B-Baum sind häufig verwendete Datenstrukturen für MySQL-Indizes. B+-Baum ist eine weitere Optimierung von B-Baum. Lassen Sie uns die obige Tabelle zur Analyse in ein Diagramm umwandeln:

Eigenschaften des B+-Baumes:

1. Nicht-Blattknoten des B+-Baums speichern keine Daten, sondern nur Schlüsselwerte

2. Die Daten der Blattknoten werden in der Reihenfolge angeordnet

3. Die Seiten im B+-Baum sind durch eine bidirektionale verknüpfte Liste verbunden

Gruppierte und nicht gruppierte Indizes

B+-Baumindizes werden entsprechend den unterschiedlichen Speichermethoden in gruppierte und nicht gruppierte Indizes unterteilt.

Gruppierter Index:

Bei Tabellen, die InnoDB als Speicher-Engine verwenden, haben alle Daten in der Tabelle einen Primärschlüssel. Auch wenn Sie keinen Primärschlüssel erstellen, erstellt das System einen impliziten Primärschlüssel für Sie.

Dies liegt daran, dass InnoDB Daten in einem B+-Baum speichert und der Schlüsselwert des B+-Baums der Primärschlüssel ist. Alle Daten in der Tabelle werden in den Blattknoten des B+-Baums gespeichert.

Diese Art von B+-Baumindex, der den Primärschlüssel als Schlüsselwert des B+-Baumindex verwendet, wird als gruppierter Index bezeichnet.

Nicht gruppierter Index:

Der B+-Baumindex, der mit anderen Spaltenwerten als dem Primärschlüssel als Schlüsselwerte erstellt wird, wird als nicht gruppierter Index bezeichnet.

Der Unterschied zwischen einem nicht gruppierten Index und einem gruppierten Index besteht darin, dass die Blattknoten eines nicht gruppierten Index nicht die Daten in der Tabelle speichern, sondern den der Spalte entsprechenden Primärschlüssel. Wenn wir Daten finden möchten, müssen wir auch im gruppierten Index basierend auf dem Primärschlüssel suchen. Dieser Vorgang der Datensuche basierend auf dem gruppierten Index wird als Tabellenrückgabe bezeichnet.

So verwenden Sie einen abdeckenden Index, um ein Zurückschreiben der Tabelle zu vermeiden

Warum wird die Tabelle zurückgegeben, obwohl ein Nicht-Primärschlüsselindex verwendet wird? Einfach ausgedrückt ist der Nicht-Primärschlüsselindex ein Nicht-Clusterindex. In den untergeordneten Knoten des B+-Baums werden nur der Primärschlüssel und der Nicht-Primärschlüsselindex gespeichert. In einer Abfrage können nur diese beiden Felder gefunden werden. Wenn Sie drei Felder finden möchten, müssen Sie den Clusterindex erneut durchsuchen. Dies ist eine Tabellenrückgabe.

Beispielsweise wird der Tabelle ein neues Feld „Alter“ hinzugefügt und wir erstellen einen Index (nicht gruppierter Index) mit „Name“.

Ausweis Name Alter
10 z dreiundzwanzig
7 ls 54
13 ww 12
5 zl 76
8 X dreiundzwanzig
12 xm 43
17 thi einundzwanzig

Wählen Sie ID, Name vom Benutzer, wobei Name = „zs“ ist;

Der Namensindex kann erreicht werden. Der Indexblattknoten speichert die Primärschlüssel-ID. Die ID und der Name können über den Namensindexbaum abgerufen werden, ohne zur Tabelle zurückzukehren. Dies erfüllt die Indexabdeckungsanforderung und ist hocheffizient.

Wählen Sie ID, Name und Alter des Benutzers aus, wobei Name = „zs“ ist.

Der Namensindex kann getroffen werden. Der Indexblattknoten speichert die Primärschlüssel-ID, aber das Altersfeld kann nur durch Zurückkehren zur Abfragetabelle abgerufen werden, was die Indexabdeckung nicht erfüllt. Es ist erforderlich, den Code erneut über den ID-Wert zu scannen, um das Altersfeld abzurufen, was die Effizienz verringert.

Fazit: Wie können wir also Tabellenrückgaben vermeiden? Ganz einfach: Ersetzen Sie den Einzelspaltenindex (Name) durch einen gemeinsamen Index (Name, Alter).

Zusammenfassen

Dies ist das Ende dieses Artikels über MySQL, das einen abdeckenden Index verwendet, um Tabellenrückläufe zu vermeiden und die Abfrage zu optimieren. Weitere relevante MySQL-Abdeckungsindizes, um Tabellenrückläufe zu vermeiden und den Abfrageinhalt zu optimieren, finden Sie in den vorherigen Artikeln von 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:
  • Detaillierte Erläuterung der Tabellenrückgabe- und Indexabdeckungsbeispiele in MySQL
  • Erklärung der Rückgabe einer MySQL-Tabelle führt zur Ungültigkeit des Index
  • So verwenden Sie MySQL zur Abdeckung von Index- und Tabellenrückgabe
  • Wie hoch ist der Leistungsschaden bei der Rückgabe von MySQL-Tabellen?

<<:  Anfänger lernen einige HTML-Tags (1)

>>:  Implementierung der ELK-Bereitstellungsmethode mit einem Klick in Docker Compose

Artikel empfehlen

So öffnen Sie eine Seite in einem Iframe

Lösung: Setzen Sie den Zielattributwert des Links ...

Vue SPA-Lösung zur Optimierung des ersten Bildschirms

Inhaltsverzeichnis Vorwort Optimierung SSR Import...

Zusammenfassung der wichtigsten Attribute des Body-Tags

bgcolor="Textfarbe" background="Hin...

Verwenden von Schleifen in awk

Lernen wir verschiedene Arten von Schleifen kenne...

Vue3 (V) Details zur Integration der HTTP-Bibliothek axios

Inhaltsverzeichnis 1. Installieren Sie axios 2. V...

Einführung und Installation von vue-cli

Inhaltsverzeichnis 1. Einleitung 2. Einführung in...

Detaillierte Erklärung zur Verwendung der Vue.js-Renderfunktion

Vue empfiehlt in den meisten Fällen die Verwendun...

So ändern Sie die Ubuntu-Quellliste (Quellliste) - detaillierte Erklärung

Einführung Die Standardquelle von Ubuntu ist kein...

Detaillierte Erklärung der grundlegenden HTML-Tags und -Strukturen

1. HTML-Übersicht 1.HTML: Hypertext Markup Langua...

CocosCreator allgemeines Framework-Design Ressourcenmanagement

Inhaltsverzeichnis Probleme mit der Ressourcenver...

Beispielcode zur Eingabe des Kennzeichens und der Provinzkürzel in html

Das Prinzip besteht darin, zuerst ein Div mit ein...

Eine Sammlung gängiger Verwendungen von HTML-Meta-Tags

Was ist ein Mata-Tag? Das <meta>-Element li...