Wenn Sie MySQL ausführlich erlernen möchten, sollten Sie mit der Makroarchitektur beginnen. In diesem Artikel lernen wir den Prozess der Ausführung von MySQL-Abfrageanweisungen kennen.
Die MySQL -Version dieses Artikels ist 8.0.18
Die Rolle des Parsers besteht darin, die folgenden Aufgaben für die SQL -Anweisungen auszuführen der Client:
Der Parser überprüft jedoch hauptsächlich die Grammatik und das Lexikon, die Tabelle und die Felder jedoch nicht korrekt ausgeführt werden.
Die Rolle des Präprozessors besteht also darin: Semantisches Parsen, um festzustellen, ob die Semantik des Parse-Baums korrekt ist und ob Tabellen und Felder vorhanden sind. Nach der Vorverarbeitung wird ein neuer Parse-Baum erhalten.
Abfrageoptimiererstruktur
Es gibt viele Möglichkeiten, eine SQL-Anweisung in MySQL auszuführen. Obwohl am Ende das gleiche Ergebnis erzielt wird, gibt es Unterschiede im Overhead und bestimmte Auswahlmöglichkeiten Die Ausführungsmethode wird vom Abfrageoptimierer bestimmt. Zum Beispiel:
Abfrageoptimierer Das ist es Ein kostenbasierter Optimierer Sein Arbeitsprinzip besteht darin, mehrere Ausführungspläne basierend auf dem Analysebaum zu generieren. Er bewertet die für verschiedene Ausführungsmethoden erforderlichen Kosten und erhält schließlich einen Ausführungsplan mit den minimalen Kosten Endgültige Lösung .
Aber diese Ausführungsmethode mit dem geringsten Overhead ist nicht unbedingt die optimale Ausführungsmethode. Beispielsweise sollte ein Index verwendet werden, sondern ein vollständiger Tabellenscan durchgeführt werden. Obwohl es im Abfrageoptimierer zwei Wörter gibt, ist diese Optimierung nicht allmächtig. In vielen Fällen ist es notwendiger zu prüfen, ob die SQL-Anweisung vernünftig geschrieben ist.
Logische Abfrageoptimierung ist hauptsächlich für die Durchführung einiger relationaler Algebra zur Optimierung von SQL-Anweisungen verantwortlich, sodass SQL-Anweisungen effizienter ausgeführt werden können
Logische Abfrageoptimierung Wir können mehrere Fälle verwenden, um es einfach zu verstehen
Zusammenführen von Unterabfragen
Vor dem Zusammenführen
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=1) OR EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=2) );
Nach dem Zusammenführen
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND (t2.b2=1 OR t2.b2=2) );
Führen Sie mehrere Unterabfragen durch Zusammenführen von Abfragebedingungen zusammen und reduzieren Sie mehrere Verbindungsvorgänge auf einen einzelnen Tabellenscan und eine einzelne Verbindung
Äquivalentes prädikatlastiges Schreiben
wie das Bekannte Wie bei einer Fuzzy-Abfrage wird % nach der Bedingung geschrieben, bevor die Indexbereichsabfrage ausgeführt wird. Tatsächlich ist dies der Verdienst des Abfrageoptimierers. Gehen Sie davon aus, dass alle verwendeten Bedingungen vor dem Umschreiben indiziert sind Dies ist die Antwort auf die Indexbereichsabfrage , wie zum Beispiel ((a AND b) AND (c AND d))
wird vereinfacht zu a AND b AND c AND d
Konstante Übertragung, wie zum Beispiel col1 = col2 AND col2 = 3
wird vereinfacht zu col1 = 3 AND col2 = 3
Ausdrucksberechnung, für einige Ausdrücke, die direkt gelöst werden können Konvertieren Sie in das endgültige Berechnungsergebnis, wie z col1 = 1+2
vereinfacht zu col1 = 3
Physische Abfrageoptimierung
Wird hauptsächlich durch physische Abfrageoptimierung durchgeführt. Die Aufgabe besteht darin, die Kosten von zu bewerten Mehrere Ausführungspläne basierend auf SQL-Anweisungen.((a AND b) AND (c AND d))
简化为 a AND b AND c AND d
col1 = col2 AND col2 = 3
简化为 col1 = 3 AND col2 = 3
col1 = 1+2
简化为 col1 = 3
Eine kurze Einführung in die Kostenbewertung. Die Kostenbewertung basiert auf den beiden Dimensionen CPU-Kosten und IO-Kosten
Indexscan | |
---|---|
Die oben genannten Parameter werden wie folgt erklärt:
Zur Berechnung der Indexkosten können Sie sich auf diesen Artikel beziehen: Warum hat sich die MySQL-Abfrage für die Verwendung dieses Index entschieden? ——Basierend auf der Indexkostenberechnung von MySQL 8.0.22 AusführungsplanDer Ausführungsplan ist das Produkt des Abfrageoptimierers und wird schließlich zur Ausführung an die Speicher-Engine übergeben. Der Ausführungsplan kann uns helfen zu wissen, wie MySQL diese SQL-Anweisung ausführt. Verwenden Sie das Schlüsselwort
Speicher-EngineDer MySQL-Server legt Spezifikationen für die Speicherung, Extraktion und Aktualisierung von Daten fest. Diese Spezifikation wird von Speicher-Engines über unterschiedliche Implementierungsmethoden implementiert präsentieren ihre einzigartigen Funktionen und Eigenschaften. Die am häufigsten verwendeten Speicher-Engines sind InnoDB und MyISAM. Lassen Sie uns kurz über die Eigenschaften dieser beiden Speicher-Engines sprechen , bessere Kontrolle von Sperren, höhere Lese- und Schreibeffizienz MyISAM
Die Speicher-Engine wird vorerst nicht erweitert . Setzen Sie ihre Vergleiche weiterhin in andere Artikel ein, sowie eine detaillierte Analyse des Prozesses der Datenaktualisierung in InnoDB Ausführung und Abrufen der Daten
Der Abfrageoptimierer erhält ihn. Die verschiedenen von diesem Analysebaum generierten Ausführungspläne werden durch logische Abfrageoptimierung und physische Abfrageoptimierung erhalten, um einen Ausführungsplan mit minimalen Kosten zu erhalten Die Ausführung Die Engine ruft diesen Ausführungsplan ab und ruft die Speicher-Engine-Schnittstelle auf. Die auf dem Ausführungsplan basierende Speicher-Engine führt eine Datenabfrage durch. Die Abfrage fragt einige Schnittstellen des Dateisystems im Betriebssystem ab und vervollständigt die Datenabfrage Geben Sie es schließlich an den Client zurück[Verwandte Empfehlungen: MySQL-Video-Tutorial] |
Das obige ist der detaillierte Inhalt vonMySQL lernt, über den Ausführungsprozess der Abfrageanweisung zu sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!