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 ultimative Methode zur Lösung des Ajax-Parser...
Installieren Zuerst müssen Sie Java und Scala ins...
Wie unten dargestellt: nsenter -t 1 -m -u -n -i s...
eins. Remote-Bereitstellung mit Tomcat 1.1 Aufget...
In diesem Artikelbeispiel wird der spezifische Co...
Priorität Der Grund, warum das Platzieren derselb...
Um die Fähigkeit zum Schreiben von nativem JavaSc...
Vorwort Jedes Mal, wenn ich das Terminal verwende...
border-radius:10px; /* Alle Ecken sind mit einem ...
Ich habe Node auf dem Laufwerk D installiert und ...
Wir alle wissen, dass Apache in der Konfiguration...
Die Warnhinweise in diesem Artikel haben nichts m...
Kerncode /*-------------------------------- Suche...
Vorinstallationsarbeiten: Stellen Sie sicher, das...
1. MHA Durch die Überwachung des Masterknotens ka...