1. EinleitungICP (Index Condition Pushdown) ist eine in MySQL 5.6 eingeführte Abfrageoptimierungsstrategie. Sie verschiebt die ursprünglich von der Serverebene durchgeführte Indexbedingungsprüfung auf die Speichermodulebene, um die Anzahl der Tabellenrückgaben und Speichermodulzugriffe zu verringern und so die Abfrageeffizienz zu verbessern. 2. GrundsatzUm zu verstehen, wie ICP funktioniert, müssen wir zunächst verstehen, wie MySQL-Abfragen ohne ICP ausgeführt werden:
Bei der Verwendung von ICP läuft die Abfrage wie folgt ab:
PraxisErstellen Sie zuerst eine Tabelle und fügen Sie Datensätze ein CREATE TABLE-Benutzer ( id int(11) NOT NULL AUTO_INCREMENT COMMENT "Primärschlüssel", name varchar(32) KOMMENTAR "Name", Stadt varchar(32) KOMMENTAR "Stadt", Alter int(11) KOMMENTAR "Alter", Primärschlüssel (ID), Schlüssel idx_name_city(Name, Stadt) )engine=InnoDB Standardzeichensatz=utf8; in Benutzer einfügen (Name, Stadt, Alter) Werte („ZhaoDa“, „Beijing“, 20), („QianEr“, „ShangHai“, 21), („SunSan“, „GuanZhou“, 22), („LiSi“, „ShenZhen“, 24), („ZhouWu“, „NingBo“, 25), („WuLiu“, „HangZhou“, 26), („ZhengQi“, „NanNing“, 27), („WangBa“, „YinChuan“, 28), („LiSi“, „TianJin“, 29), („ZhangSan“, „NanJing“, 30), („CuiShi“, „ZhengZhou“, 65), („LiSi“, „KunMing“, 29), („LiSi“, „ZhengZhou“, 30); Überprüfen Sie die Tabellendatensätze mysql> wähle * vom Benutzer aus; +----+----------+--------------+------+ | ID | Name | Stadt | Alter | +----+----------+--------------+------+ | 1 | ZhaoDa | Peking | 20 | | 2 | QianEr | Shanghai | 21 | | 3 | SunSan | GuanZhou | 22 | | 4 | LiSi | ShenZhen | 24 | | 5 | ZhouWu | NingBo | 25 | | 6 | WuLiu | HangZhou | 26 | | 7 | ZhengQi | NanNing | 27 | | 8 | WangBa | YinChuan | 28 | | 9 | LiSi | TianJin | 29 | | 10 | ZhangSan | NanJing | 30 | | 11 | CuiShi | ZhengZhou | 65 | | 12 | LiSi | KunMing | 29 | | 13 | LiSi | ZhengZhou | 30 | +----+----------+--------------+------+ 13 Zeilen im Satz (0,00 Sek.) Beachten Sie, dass in dieser Tabelle ein gemeinsamer Index (Name, Stadt) erstellt wird. Angenommen, wir möchten die folgende Anweisung abfragen: Wählen Sie * vom Benutzer, wobei Name="LiSi" und Stadt wie "%Z%" und Alter > 25 ist; 3.1 Kein Index-Pushdown verwendenOhne Index-Pushdown kann gemäß dem Prinzip „Linksübereinstimmung“ des gemeinsamen Index nur die Spalte „Name“ den Index verwenden. Die Spalte „Ort“ kann den Index nicht verwenden, da es sich um eine Fuzzy-Übereinstimmung handelt. Der Ausführungsprozess zu diesem Zeitpunkt ist wie folgt:
Lass uns ein Bild zeichnen: Indexbedingungs-Pushdown wird nicht verwendet 3.2 Index-Pushdown verwendenBei Verwendung von Index-Pushdown läuft die Ausführung wie folgt ab:
Lass uns ein Bild zeichnen:
Darüber hinaus können Sie auch aus dem Ausführungsplan ersehen, dass Index-Pushdown verwendet wird (Die Bedingung „Index verwenden“ wird in Extra angezeigt). mysql> erklären Sie „select * from user where name="LiSi" und Stadt wie "%Z%" und Alter > 25; +----+----------+----------+---------+------+---------------+---------------+-----------+---------+---------+-------+----------+----------+------------------------------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+---------------+-----------+---------+---------+-------+----------+----------+------------------------------------+ | 1 | SIMPLE | Benutzer | NULL | ref | idx_name_city | idx_name_city | 99 | const | 4 | 7,69 | Indexbedingung verwenden; Where verwenden | +----+----------+----------+---------+------+---------------+---------------+-----------+---------+---------+-------+----------+----------+------------------------------------+ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) IV. Nutzungsbedingungen
5. Verwandte 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"; ZusammenfassenDies ist das Ende dieses Artikels über MySQL Index Pushdown (ICP). Weitere Informationen zu MySQL Index Pushdown (ICP) finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung der Lösung zur Bildverformung unter Flex-Layout
>>: Verwendung des Docker-Systembefehlssatzes
Die GtkTreeView-Komponente ist eine erweiterte Ko...
<br />Hallo zusammen! Es ist mir eine Ehre, ...
Mehrere Teile von Compose befassen sich in irgend...
Der Weg vor uns ist lang und beschwerlich, aber i...
In diesem Artikel wird der spezifische Code der L...
Inhaltsverzeichnis 1. Routing-bezogene Objekte 2....
Samba Übersicht Samba ist eine kostenlose Softwar...
In diesem Artikel wird der spezifische Code von j...
Lebenszyklusklassifizierung Jede Komponente von V...
Im Projekt (nodejs) müssen mehrere Daten gleichze...
Dies ist eine Interviewfrage, die die Verwendung ...
Bildbeschleuniger Manchmal ist es schwierig, Bild...
1. Überprüfen Sie die PHP-Version nach dem Aufruf...
Verwenden Sie einfach CSS, um alle Effekte von Ec...
Heute wollte ich den MySQL-Port ändern, habe jedo...