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 masturbierenBevor 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.6Versionen 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 VersionenVersion 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 . übenNatü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. ZusammenfassenDurch 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ösung, wenn Docker plötzlich vom externen Netzwerk nicht mehr erreichbar ist
Rand: automatisch; + Position: absolut; oben, unt...
In diesem Artikelbeispiel wird der spezifische Co...
Übersetzen Sie diese URL: http://translateth.is G...
Inhaltsverzeichnis Vorwort: 1. Einführung in die ...
Inhaltsverzeichnis 1. Mehrere Syntaxen von Insert...
Vorwort: Die verteilte Master-Slave-Architektur v...
Inhaltsverzeichnis 1. Anwendung und Konfiguration...
1. Docker-Startproblem: Problem gelöst: Sie müsse...
Inhaltsverzeichnis Pagoda installieren Konfigurie...
Einführung in influxDB influxDB ist eine verteilt...
Canvas ist ein neues Tag in HTML5. Sie können js ...
In diesem Artikel wird der spezifische Code für V...
vue+element UI kapselt eine öffentliche Funktion ...
Zuvor habe ich zusammengefasst, wie man mit CSS di...
Verwandte Artikel: Anfänger lernen einige HTML-Ta...