Wenn Sie im Rahmen eines Vorstellungsgesprächs Begriffe wie „MySQL 5.6“ und „Indexoptimierung“ hören, dürfte Ihnen sofort klar sein, dass es bei dieser Frage um „Index-Pushdown“ geht. Was ist Index-Pushdown?Index Condition Pushdown (ICP) ist eine neue Funktion von MySQL 5.6. Sie kann die Anzahl der Tabellenabfragen reduzieren und die Abfrageeffizienz verbessern. Das Prinzip der Index-Pushdown-OptimierungWerfen wir zunächst einen kurzen Blick auf die allgemeine Architektur von MySQL: Die MySQL-Serviceschicht ist für die SQL-Syntaxanalyse, die Generierung von Ausführungsplänen usw. und den Aufruf der Speicher-Engine-Schicht zum Speichern und Abrufen von Daten verantwortlich. Das Pushdown des Index-Pushs bedeutet tatsächlich, dass einige der Aufgaben, die in der Verantwortung der oberen Schicht (Serviceschicht) liegen, zur Verarbeitung an die untere Schicht (Engine-Schicht) übergeben werden. Schauen wir uns die MySQL-Abfrage ohne Verwendung von ICP genauer an:
Bei Verwendung von ICP läuft die Abfrage wie folgt ab:
Spezifische Praxis des Index-PushdownsDie Theorie ist ziemlich abstrakt, also lasst uns sie in die Praxis umsetzen. Verwenden Sie eine Benutzertabelle „tuser“ und erstellen Sie einen gemeinsamen Index (Name, Alter) in der Tabelle. Wenn jetzt eine Anforderung besteht: Rufen Sie alle Benutzer in der Tabelle ab, deren Vorname Zhang ist und die 10 Jahre alt sind. Die SQL-Anweisung wird dann folgendermaßen geschrieben: Wählen Sie * aus dem Benutzer, wobei der Name beispielsweise „张%“ und das Alter 10 ist. Wenn Sie das Prinzip der ganz links stehenden Übereinstimmung von Indizes verstehen, wissen Sie, dass diese Anweisung nur beim Durchsuchen des Indexbaums verwendet werden kann und die ID des ersten Datensatzes, der die Bedingungen erfüllt, 1 ist. Was sind also die nächsten Schritte? Kein ICP verwendet Vor MySQL 5.6 findet die Speicher-Engine die Primärschlüssel-ID (1, 4) des Schauen wir uns das schematische Diagramm an: Es ist ersichtlich, dass die Tabelle zweimal zurückgegeben werden muss, wodurch das andere Feldalter unseres gemeinsamen Indexes verschwendet wird. Verwenden von ICP Ab MySQL 5.6 findet die Speicher-Engine Schauen wir uns das schematische Diagramm an: Sie können sehen, dass die Tabelle nur einmal zurückgegeben wurde. Darüber hinaus können wir uns auch den Ausführungsplan ansehen und in +----+----------+-------+------------+-------+---------------+---------------+-----------+-----------+----------+----------+------+----------+----------+----------+-----------+---------------------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+-------+------------+-------+---------------+---------------+-----------+-----------+----------+----------+------+----------+----------+----------+-----------+---------------------------+ | 1 | SIMPLE | tuser | NULL | Bereich | na_index | na_index | 102 | NULL | 2 | 25.00 | Indexbedingung wird verwendet | +----+----------+-------+------------+-------+---------------+---------------+-----------+-----------+----------+----------+------+----------+----------+----------+-----------+---------------------------+ Bedingungen für die Verwendung von Index-Pushdowns
Der Zweck des Index-Pushdowns besteht darin, die Anzahl der Tabellenrückgaben zu verringern, d. h. die Anzahl der E/A-Vorgänge zu reduzieren. Beim gruppierten Index von InnoDB sind die Daten und der Index zusammen und es gibt keine Tabellenrückgabe.
Zugehörige SystemparameterDas Pushdown der Indexbedingung ist standardmäßig aktiviert und Sie können den Systemparameter optimizer_switch verwenden, um zu steuern, ob es aktiviert ist. Zeigen Sie den Standardstatus an: mysql> wähle @@optimizer_switch\G; *************************** 1. Reihe *************************** @@optimizer_switch: index_merge=ein,index_merge_union=ein,index_merge_sort_union=ein,index_merge_intersection=ein,engine_condition_pushdown=ein,index_condition_pushdown=ein,mrr=ein,mrr_cost_based=ein,block_nested_loop=ein,batched_key_access=aus,materialization=ein,semijoin=ein,loosescan=ein,firstmatch=ein,duplicateweedout=ein,subquery_materialization_cost_based=ein,use_index_extensions=ein,condition_fanout_filter=ein,derived_merge=ein 1 Zeile im Satz (0,00 Sek.) Zustand umschalten: setze optimizer_switch="index_condition_pushdown=off"; setze optimizer_switch="index_condition_pushdown=on"; ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken können! Das könnte Sie auch interessieren:
|
<<: Fügen Sie nach js oder css ?v= Versionsnummer hinzu, um das Browser-Caching zu verhindern
01 Das Konzept der parallelen Replikation In der ...
Wenn Sie kein Linux-System haben, finden Sie unte...
Vorwort Beim Betrieb und der Verwaltung von Linux...
Wenn wir verstehen, wie Tomcat gleichzeitige Anfr...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Traversal-Klasse 1. fürJede...
Im folgenden Beispiel ist die Anzeige normal, wenn...
Inhaltsverzeichnis Vorwort Die Rolle des Renders ...
1. Fügen Sie das Plug-In hinzu und fügen Sie die ...
Vorteile eines programmatischen Ansatzes 1. Globa...
Inhaltsverzeichnis Stabilisierung Drosselung: Ant...
1.core-Datei Wenn während der Programmausführung ...
Inhaltsverzeichnis Vorwort 1. Endpunkt 2. Verbind...
Vorwort Bei unserer täglichen Arbeit führen wir m...
In diesem Artikelbeispiel wird der spezifische Ja...