VorwortWenn 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 des Index verstehen, wissen Sie, dass diese Anweisung nur beim Durchsuchen des Indexbaums 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 der Spalte „Extra“ +----+----------+-------+------------+-------+---------------+---------------+-----------+-----------+----------+----------+------+----------+----------+----------+-----------+---------------------------+ | 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"; siehe: [1]. „MySQL Technical Insider: InnoDB-Speicher-Engine“ [2]. MySQL Praxis 45 Vorlesungen [3]. Einfaches Verständnis und Beispiele für MySQL Index Pushdown (ICP) [4]. Verstehen Sie in einem Artikel, was MySQL Index Pushdown (ICP) ist ZusammenfassenDies ist das Ende dieses Artikels über MySQL-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:
|
<<: Detaillierte Erklärung des Konflikts zwischen Flex-Layout und Position: absolut/fest
>>: Teilen Sie 5 hilfreiche CSS-Selektoren, um Ihr CSS-Erlebnis zu bereichern
1. Mycat-Anwendungsszenarien Mycat wurde für eine...
Inhaltsverzeichnis 1. Aggregierte Abfrage 1. COUN...
Wenn wir TypeScript verwenden, möchten wir das vo...
Dieser Artikel stellt hauptsächlich den relevante...
Die PC-Version von React wurde für die Verwendung...
Ich glaube, dass viele Benutzer, die Websites ers...
Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...
Kerncode <!DOCTYPE html> <html lang=&quo...
Inhaltsverzeichnis 1. mixin.scss 2. Einzeldateinu...
In diesem Artikel wird der spezifische Code von V...
Als ich kürzlich das Intranet-Portal änderte, sti...
In diesem Artikel wird der spezifische Code von j...
Inhaltsverzeichnis Vorwort Sechs Funktionen von J...
1. Laden Sie die 64-Bit-ZIP-Datei von der offizie...
So deklarieren Sie einen Cursor in MySQL: 1. Vari...