MySQL-Leistungsoptimierungs-Index-Pushdown

MySQL-Leistungsoptimierungs-Index-Pushdown

Index Condition Pushdown (ICP) wird in MySQL 5.6 eingeführt und dient der Optimierung von Abfragen.

Ohne die Verwendung von ICP ruft die Speicher-Engine bei Abfragen mit einem Nicht-Primärschlüsselindex (auch als normaler Index oder Sekundärindex bezeichnet) die Daten über den Index ab und gibt sie an den MySQL-Server zurück, der dann bestimmt, ob die Daten die Bedingungen erfüllen.

Wenn bei Verwendung von ICP Beurteilungsbedingungen für bestimmte indizierte Spalten vorliegen, übergibt der MySQL-Server diese Beurteilungsbedingungen an die Speicher-Engine. Anschließend bestimmt die Speicher-Engine, ob der Index die vom MySQL-Server übergebenen Bedingungen erfüllt. Nur wenn der Index die Bedingungen erfüllt, werden die Daten abgerufen und an den MySQL-Server zurückgegeben.

Durch die Pushdown-Optimierung der Indexbedingungen kann die Anzahl der Abfragen der Basistabelle durch die Speicher-Engine und die Anzahl der Datenempfangsvorgänge durch den MySQL-Server von der Speicher-Engine reduziert werden.

Fangen Sie an zu masturbieren

Bevor wir beginnen, müssen wir eine Benutzertabelle (Benutzer) vorbereiten, deren Hauptfelder sind: ID, Name, Alter und Adresse. Erstellen Sie einen gemeinsamen Index (Name, Alter).

Angenommen, es besteht die Anforderung, alle Benutzer abzugleichen, deren Vorname Chen ist. Die SQL-Anweisung lautet wie folgt:

SELECT * vom Benutzer, wobei der Name etwa ‚陈%‘ lautet

Gemäß dem Prinzip des "besten linken Präfixes" wird hier der gemeinsame Index (Name, Alter) für die Abfrage verwendet, und die Leistung ist definitiv höher als die eines vollständigen Tabellenscans.

Die Frage ist: Was ist, wenn andere Bedingungen vorliegen? Angenommen, es besteht eine weitere Anforderung, Benutzer abzugleichen, deren Vorname Chen ist und die 20 Jahre alt sind. Die SQL-Anweisung lautet zu diesem Zeitpunkt wie folgt:

SELECT * vom Benutzer, wobei der Name beispielsweise ‚陈%‘ und das Alter 20 ist

Wie soll diese SQL-Anweisung ausgeführt werden? Nachfolgend finden Sie eine Analyse der Versionen vor und nach MySQL 5.6.

MySQL-Versionen vor 5.6

Versionen vor 5.6 verfügen nicht über die Index-Pushdown-Optimierung, daher ist der Ausführungsprozess wie folgt:

Das Feld „Alter“ wird ignoriert und die Abfrage wird direkt über den Namen ausgeführt. Im Lektionsbaum (Name, Alter) werden zwei Ergebnisse mit den IDs 2 bzw. 1 gefunden. Anschließend werden die erhaltenen ID-Werte verwendet, um die Tabelle immer wieder abzufragen. Daher muss für diesen Vorgang zweimal zur Tabelle zurückgekehrt werden .

Mysql5.6 und spätere Versionen

Version 5.6 fügt die Index-Pushdown-Optimierung hinzu und der Ausführungsprozess ist wie folgt:

InnoDB ignoriert das Feld „Alter“ nicht. Stattdessen ermittelt es, ob das Alter im Index gleich 20 ist, und überspringt direkt Datensätze, die ungleich 20 sind. Daher wird im Indexbaum (Name, Alter) nur ein Datensatz abgeglichen. Zu diesem Zeitpunkt wird die ID verwendet, um alle Daten im Primärschlüssel-Indexbaum abzufragen. Dieser Vorgang erfordert nur eine Tabellenrückgabe .

üben

Natürlich ist die obige Analyse nur prinzipiell. Wir können sie auch in der Praxis analysieren. Daher installierte Chen MySQL Version 5.6 und analysierte die obige Anweisung wie unten gezeigt:

Dem Ergebnis der Explain-Analyse zufolge können wir erkennen, dass der Wert von Extra „Indexbedingung verwenden“ lautet, was bedeutet, dass Index-Pushdown verwendet wurde.

Zusammenfassen

Durch die Optimierung des Index-Pushdowns bei Nicht-Primärschlüsselindizes kann die Anzahl der Tabellenrückgaben effektiv reduziert und die Abfrageeffizienz erheblich verbessert werden.

Um Index-Pushdown zu deaktivieren, können Sie den folgenden Befehl verwenden. Ich werde die Änderung der Konfigurationsdatei nicht weiter erläutern. Warum sollte man schließlich eine so hervorragende Funktion deaktivieren?

setze optimizer_switch='index_condition_pushdown=off';

Dies ist das Ende dieses Artikels über MySQL-Leistungsoptimierung und Index-Pushdown. Weitere relevante MySQL-Index-Pushdown-Inhalte 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:
  • Lösungen für Probleme bei der Leistungsoptimierung von MySQL-Indizes
  • MySQL-Performance-Optimierung: So nutzen Sie Indizes effizient und richtig
  • Fallstudie zur Leistungsoptimierung bei MySQL – einschließlich Indexfreigabe
  • Fallstudie zur Leistungsoptimierung von MySQL – einschließlich Index und SQL_NO_CACHE
  • MySQL Leistungsoptimierung Indexoptimierung
  • Die Nutzungsstrategie und Optimierung hinter MySQL-Indizes (Hochleistungsindex-Strategie)
  • MySQL verwendet Indizes zur Leistungsoptimierung

<<:  Reines CSS3 zum Erzielen einer schönen Bibliothek im Stil einer Eingabefeldanimation (Texteingabeliebe)

>>:  Lösung, wenn Docker plötzlich vom externen Netzwerk nicht mehr erreichbar ist

Artikel empfehlen

Vue.js implementiert Kalenderfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Gemeinsame Nutzung von zwei Plug-Ins zur Übersetzung von Webseiten

Übersetzen Sie diese URL: http://translateth.is G...

Einführung in MySQL-Rollenfunktionen

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...

MySQL: Praktische Erfahrung mit der Verwendung der Insert-Anweisung

Inhaltsverzeichnis 1. Mehrere Syntaxen von Insert...

Lösen Sie den Konflikt zwischen Docker und VMware

1. Docker-Startproblem: Problem gelöst: Sie müsse...

JS verwendet Canvas-Technologie, um Echarts-Balkendiagramme zu imitieren

Canvas ist ein neues Tag in HTML5. Sie können js ...

Vue implementiert das Hinzufügen, Anzeigen und Löschen mehrerer Bilder

In diesem Artikel wird der spezifische Code für V...

Vue kapselt die öffentliche Funktionsmethode zum Exportieren von Excel-Daten

vue+element UI kapselt eine öffentliche Funktion ...

So zeigen Sie den Rahmen an, wenn td leer ist

Zuvor habe ich zusammengefasst, wie man mit CSS di...

Anfänger lernen einige HTML-Tags (3)

Verwandte Artikel: Anfänger lernen einige HTML-Ta...