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
Dieser Artikel beschreibt anhand eines Beispiels ...
Mit der Array-Deduplizierung wird man häufig bei ...
Sublimieren Sublime Text ist ein Code-Editor (Sub...
1 Problembeschreibung: 1.1 Wenn VMware zum ersten...
Die JSON-Daten müssen im HTML-Format zurückgegeben...
1 Übersicht System CentOS8, verwenden Sie httpd, ...
Im Docker Starten Sie alle Containerbefehle Docke...
>>>>>SSH-Tutorial zur Installation...
Vorwort In der Demonstration [IE9-] ist der Farbv...
Die Requisiten der Komponente (Requisiten sind ei...
Die Installation und Bereitstellung eines private...
Vorwort Dieser Artikel verwendet die Vorverarbeit...
Damit die Seitenanzeige in verschiedenen Browsern ...
Die Sache ist: Jeder kennt „Speicherlecks“. Es gi...
Inhaltsverzeichnis 1. Tabellenmethode umbenennen ...