Detaillierte Erläuterung der Tabellenrückgabe- und Indexabdeckungsbeispiele in MySQL

Detaillierte Erläuterung der Tabellenrückgabe- und Indexabdeckungsbeispiele in MySQL

Indextyp

Gruppierter Index: Blattknoten speichern Zeilendatensätze und jede Tabelle muss mindestens einen gruppierten Index haben. Die Verwendung einer Clustered-Index-Abfrage ist sehr schnell, da Sie den Zeilendatensatz direkt lokalisieren können. Gewöhnlicher Index: Sekundärindex, ein anderer Index als der Clustered-Index, d. h. ein nicht gruppierter Index. Die Blattknoten gewöhnlicher Indizes speichern die Werte des Primärschlüssels (Clusterindex).

Regeln für die Rekursion gruppierter Indizes:

  • Wenn die Tabelle einen Primärschlüssel hat, ist der Primärschlüssel der gruppierte Index.
  • Wenn die Tabelle keinen Primärschlüssel hat, wird standardmäßig die erste NOT NULL- und eindeutige (UNIQUE) Spalte als gruppierter Index verwendet.
  • Wenn keine der oben genannten Angaben gemacht wird, wird standardmäßig eine versteckte Zeilen-ID als gruppierter Index erstellt.

Indexstruktur

id ist der Primärschlüssel, es handelt sich also um einen gruppierten Index, und seine Blattknoten speichern die Daten der entsprechenden Zeilendatensätze.

Nicht gruppierter Index

Clustered-Index-Abfrage

Wenn die Abfragebedingung der Primärschlüssel (Clusterindex) ist, müssen Sie den B+-Baum nur einmal scannen, um die Zeilendatensatzdaten zu finden, die über den Clusterindex gesucht werden sollen.

Beispiel: select * from user where id = 1;

Nicht gruppierte Indexabfrage

Wenn die Abfragebedingung ein gemeinsamer Index (nicht gruppierter Index) ist, muss der B+-Baum zweimal gescannt werden. Der erste Scan lokalisiert den Wert des gruppierten Indexes über den gemeinsamen Index, und dann lokalisiert der zweite Scan die zu findenden Zeilendatensatzdaten über den Wert des gruppierten Indexes.

Beispiel: select * from user where age = 30;

1. Suchen Sie zunächst den Primärschlüsselwert id=1 über den gemeinsamen Index age=30
2. Suchen Sie dann die Zeilendatensatzdaten über den Clustered-Index id=1

Suchen Sie zuerst den Clusterindexwert über den Wert des normalen Index und dann die Zeilendatensatzdaten über den Wert des Clusterindex. Es ist erforderlich, den Index B + -Baum zweimal zu scannen, und seine Leistung ist geringer als beim einmaligen Scannen des Indexbaums.

Indexabdeckung

Alle von SQL benötigten Spaltendaten können in einem Indexbaum abgerufen werden, ohne zur Tabelle zurückkehren zu müssen, was schneller ist.

Beispiel: select id,age from user where age = 10;

Abfrage mittels ID, Alter, Name:

Wählen Sie ID, Alter, Name und Gehalt des Benutzers aus, wobei Alter = 10 ist.
Erläuterung der Analyse: Alter ist ein gemeinsamer Index, aber die Spalte Name befindet sich nicht im Indexbaum. Daher ist es nach der Abfrage der Werte von ID und Alter über den Altersindex erforderlich, zur Tabelle zurückzukehren und den Wert von Name abzufragen. Die Verwendung von Where in der Spalte „Extra“ zeigt an, dass eine Tabellenabfrage ausgeführt wird.

Typ: alle, was auf einen vollständigen Tabellenscan hinweist

Fügen Sie der Tabelle einen gemeinsamen Index hinzu: CREATE INDEX idx_user_name_age_salary ON mydb.user (name, age, salary);

Erläuterung der Analyse: Zu diesem Zeitpunkt sind die Felder Alter und Name der zusammengesetzte Index idx_age_name. Die Werte der abgefragten Felder id, Alter und Name befinden sich nur im Indexbaum. Es ist nur erforderlich, den zusammengesetzten Index B+-Baum einmal zu scannen. Auf diese Weise wird die Indexabdeckung erreicht. Zu diesem Zeitpunkt wird für das zusätzliche Feld Index verwendet, was bedeutet, dass die Indexabdeckung verwendet wird.

Paginierungsabfrage (ohne Verwendung eines Index):

Nachdem Sie einen Index hinzugefügt haben, können Sie ihn für eine schnelle Suche verwenden.

Zusammenfassen

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

<<:  Verwendung und Verschönerung von HTML-Blockquote-Tags

>>:  Zusammenfassung des CSS-Zählers und des Inhalts

Artikel empfehlen

Detaillierte Erklärung des Unterschieds zwischen run/cmd/entrypoint in Docker

In Dockerfile können run, cmd und entrypoint zum ...

MySQL-Datenbank-Indexreihenfolge durch Sortierung – detaillierte Erklärung

Inhaltsverzeichnis Die Ursache des Vorfalls Sorti...

Element Plus implementiert Affix

Inhaltsverzeichnis 1. Komponenteneinführung 2. Qu...

Eine kurze Einführung in die Abfrageeffizienz von MySQL-Speicherfeldtypen

Die Suchleistung von der schnellsten bis zur lang...

Lösung für das Problem des MySQL-Master-Slave-Switch-Kanals

Nach der VIP-Konfiguration wird beim Aktiv/Standb...

Detaillierte Erklärung eines einfachen Schneeeffektbeispiels mit JS

Inhaltsverzeichnis Vorwort Hauptimplementierungsc...

Detaillierte Erklärung der Truncate-Verwendung in MySQL

Vorwort: Wenn wir eine Tabelle löschen möchten, v...

So fügen Sie einem Alpine-Image einen Ansible-Dienst hinzu

Verwenden Sie apk add ansible, um den Ansible-Die...