Vorwort MySQL 8.0.13 unterstützt nun den Index-Skip-Scan, auch bekannt als Index-Jump-Scan. Diese Optimierungsmethode unterstützt Situationen, in denen das SQL nicht dem Prinzip des äußersten linken Präfixes des zusammengesetzten Index entspricht und der Optimierer den zusammengesetzten Index dennoch verwenden kann. Reden ist billig, zeig mir den Code üben Verwenden Sie das Beispiel offizieller Dokumentation, um Daten zu konstruieren mysql> TABELLE ERSTELLEN t1 (f1 INT NICHT NULL, f2 INT NICHT NULL, PRIMARY KEY(f1, f2)); Abfrage OK, 0 Zeilen betroffen (0,21 Sek.) mysql> INSERT INTO t1 VALUES (1,1), (1,2), (1,3), (1,4), (1,5), (2,1), (2,2), (2,3), (2,4), (2,5); Abfrage OK, 10 Zeilen betroffen (0,07 Sek.) Datensätze: 10 Duplikate: 0 Warnungen: 0 MySQL> mysql> INSERT INTO t1 SELECT f1, f2 + 5 FROM t1; Abfrage OK, 10 Zeilen betroffen (0,06 Sek.) Datensätze: 10 Duplikate: 0 Warnungen: 0 mysql> INSERT INTO t1 SELECT f1, f2 + 10 FROM t1; Abfrage OK, 20 Zeilen betroffen (0,03 Sek.) Datensätze: 20 Duplikate: 0 Warnungen: 0 mysql> INSERT INTO t1 SELECT f1, f2 + 20 FROM t1; Abfrage OK, 40 Zeilen betroffen (0,03 Sek.) Datensätze: 40 Duplikate: 0 Warnungen: 0 mysql> INSERT INTO t1 SELECT f1, f2 + 40 FROM t1; Abfrage OK, 80 Zeilen betroffen (0,05 Sek.) Datensätze: 80 Duplikate: 0 Warnungen: 0 Beachten Sie, dass der Primärschlüssel der Tabelle t1 ein zusammengesetzter Index (f1, f2) ist. Wenn die Where-Bedingung in SQL nicht das am weitesten links stehende Präfix f1 enthält, wird in früheren Versionen ein FULL TABLE SCAN ausgeführt. Was wird in MySQL 8.0.20 passieren? Schauen wir uns den Ausführungsplan an mysql> ERKLÄREN SIE SELECT f1, f2 FROM t1 WHERE f2 = 40\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t1 Partitionen: NULL Typ: Bereich mögliche Schlüssel: PRIMARY Schlüssel: PRIMARY Schlüssellänge: 8 Ref: NULL Reihen: 16 gefiltert: 100,00 Extra: Verwenden von „where“; Verwenden von Index für Skip-Scan 1 Zeile im Satz, 1 Warnung (0,01 Sek.) mysql> ERKLÄREN SIE SELECT f1, f2 FROM t1 WHERE f2 > 40\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t1 Partitionen: NULL Typ: Bereich mögliche Schlüssel: PRIMARY Schlüssel: PRIMARY Schlüssellänge: 8 Ref: NULL Reihen: 53 gefiltert: 100,00 Extra: Verwenden von „where“; Verwenden von Index für Skip-Scan 1 Zeile im Satz, 1 Warnung (0,00 Sek.) Die Ausführungspläne der beiden SQL-Anweisungen, bei denen die Bedingungen f2>40 und f2=40 gelten, enthalten beide „Index für Skip-Scan verwenden“ und „Typ ist Bereich“. Der gesamte Ausführungsplan sieht wie folgt aus:
Aus der obigen Beschreibung können wir erkennen, dass durch die Verwendung des Skip-Scans ein vollständiger Index-Scan vermieden wird und dadurch die Leistung verbessert wird. Wenn die Funktion mysql> setze Sitzungsoptimierer_schalter='skip_scan=off'; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> ERKLÄREN SIE SELECT * FROM t1 WHERE f2 = 40\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t1 Partitionen: NULL Typ: ALLE mögliche Schlüssel: NULL Schlüssel: NULL key_len: NULL Ref: NULL Reihen: 160 gefiltert: 10.00 Extra: Verwenden von „where“ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) Einschränkungen 1. Die ausgewählten Felder dürfen keine Nichtindexfelder enthalten Wenn sich das Feld c1 beispielsweise im zusammengesetzten Index befindet, kann die Funktion „Select * SQL“ den Scan nicht überspringen. mysql> ERKLÄREN SIE SELECT * FROM t1 WHERE f2 = 40\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t1 Partitionen: NULL Typ: ALLE mögliche Schlüssel: NULL Schlüssel: NULL key_len: NULL Ref: NULL Reihen: 160 gefiltert: 10.00 Extra: Verwenden von „where“ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) 2. SQL darf keine Group-By- oder Distinct-Syntax enthalten mysql> ERKLÄREN SELECT distinct f1 FROM t1 WHERE f2 = 40\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t1 Partitionen: NULL Typ: Bereich mögliche Schlüssel: PRIMARY Schlüssel: PRIMARY Schlüssellänge: 8 Ref: NULL Reihen: 3 gefiltert: 100,00 Extra: Verwenden von „where“; Verwenden von „index“ für „group-by“ 1 Zeile im Satz, 1 Warnung (0,01 Sek.) 3. Der Skip-Scan unterstützt nur Einzeltabellenabfragen und kann nicht für die Zuordnung mehrerer Tabellen verwendet werden. 4. Für den zusammengesetzten Index ([A_1, …, A_k,] B_1, …, B_m, C [, D_1, …, D_n]) können A und D leer sein, die Felder B und C jedoch nicht leer sein. Es ist wichtig zu betonen, dass es für die Datenbankoptimierung kein Patentrezept gibt. Der MySQL-Optimierer wählt den geeigneten Ausführungsplan auf Basis der Kosten aus. Nicht alle bedingten Abfragen, die das äußerste linke Präfix ignorieren, können den Index-Skip-Scan nutzen. Zum Beispiel: mysql> TABELLE ERSTELLEN `t3` (id int nicht null auto_increment PRIMARY KEY, `f1` int NICHT NULL, `f2` int NICHT NULL, `c1` int DEFAULT '0', Schlüssel idx_f12(`f1`,`f2`,c1) ) ENGINE=InnoDB STANDARD-CHARSET=utf8mb4; Abfrage OK, 0 Zeilen betroffen (0,24 Sek.) mysql> einfügen in t3(f1,f2,c1) wähle f1,f2,c1 aus t1; Abfrage OK, 320 Zeilen betroffen (0,07 Sek.) Datensätze: 320 Duplikate: 0 Warnungen: 0 Die Datenmenge verdoppelt sich auf 320 Zeilen. Zu diesem Zeitpunkt verwendet die Abfrage f2 = 40 keinen Index-Skip-Scan. mysql> erklären select f2 from t3 where f2=40 \G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t3 Partitionen: NULL Typ: Index mögliche Tastenkombinationen: idx_f12 Schlüssel: idx_f12 Schlüssellänge: 13 Ref: NULL Reihen: 320 gefiltert: 10.00 Extra: Verwenden von „where“; Verwenden von „index“ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) -Das Ende- Oben sind die Details zum Index Skip Scan in MySQL 8.0 aufgeführt. Weitere Informationen zum Index Skip Scan in MySQL 8.0 finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So überwachen Sie MySQL mit Zabbix
>>: Grundlegendes zur JavaScript-Prototypenkette
Laden Sie das Image herunter (optionaler Schritt,...
Als ich kürzlich das Intranet-Portal änderte, sti...
Inhaltsverzeichnis Vorwort Stellt der Interviewer...
Problembeschreibung Ich hatte kürzlich ein Proble...
1. Mobile Auswahl der Formulartexteingabe: Wenn i...
Dieser Artikel beschreibt anhand eines Beispiels,...
In diesem Artikelbeispiel wird der spezifische JS...
Als ich das erste Mal anfing, fand ich viele Fehl...
Geschäftsszenario: Verwenden Sie den EL-Dialog vo...
Inhaltsverzeichnis 1. Was sind Optionen? 2. Welch...
Ref-Definition: Wird verwendet, um Referenzinform...
Dieser Artikel beschreibt, wie man mit Docker Zoo...
Das geschäftliche Social-Networking-Portal Linked...
Heute bin ich wieder in die Falle getappt. Ich bi...
Kürzlich stieß ich auf eine Webseite, die zwar Bil...