Heim > Datenbank > MySQL-Tutorial > Hauptteil

MySQL lernt, über den Ausführungsprozess der Abfrageanweisung zu sprechen

青灯夜游
Freigeben: 2023-01-11 20:38:55
nach vorne
1273 Leute haben es durchsucht

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.

MySQL lernt, über den Ausführungsprozess der Abfrageanweisung zu sprechen

Die MySQL -Version dieses Artikels ist 8.0.18

architecture Diagram

Parser

Die Rolle des Parsers besteht darin, die folgenden Aufgaben für die SQL -Anweisungen auszuführen der Client:

  • Grammatikanalyse: Überprüfen Sie die Syntax der SQL-Anweisung, ob die Klammern und Anführungszeichen geschlossen sind usw.
  • Lexikalisches Parsen: Teilen Sie die Schlüsselwörter, Tabellennamen und Feldnamen in der SQL-Anweisung in Knoten auf, und schließlich einen Analysebaum erhalten

Präprozessor

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.

Abfrageoptimierer

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:

  • In der Tabelle stehen mehrere Indizes zur Auswahl. Welcher Index soll speziell ausgewählt werden?
  • Wenn wir verwandte Abfragen für mehrere Tabellen durchführen, werden die Daten der Tabelle als Benchmark-Tabelle verwendet.

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

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 Login kopieren

    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)
    );
    Nach dem Login kopieren

    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.
    • Physische Abfrageoptimierung löst hauptsächlich die folgenden Probleme: ((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
  • Welche Methode ist beim Scannen einzelner Tabellen (Scan-Index + Tabellenrückgabe oder vollständiger Tabellenscan) am kostengünstigsten?

Wenn vorhanden Ist eine Tischverbindung, welche Verbindungsmethode ist am kostengünstigsten?

Eine kurze Einführung in die Kostenbewertung. Die Kostenbewertung basiert auf den beiden Dimensionen CPU-Kosten und IO-Kosten

  • Scan-Methode
  • Kostenbewertungsformel

Sequentieller ScanN_page * a_page_IO_time + N_tuple * a_tuple_CPU_timeC_index + N_page_index * a_page_IO_time
Indexscan

Die oben genannten Parameter werden wie folgt erklärt:

  • a_page_IO_time, die IO-Zeit des Ladens einer Datenseite
  • N_page, die Anzahl der Datenseiten
  • N_tuple, die Anzahl der Tupel (ein Tupel wird als eine Datenzeile verstanden)
  • a_tuple_CPU_time, ein Tupel aus Daten. Die für das Parsen der Seite aufgewendete CPU-Zeit.
  • C_index, die für den Index aufgewendete E/A-Zeit.
  • N_page_index, die Anzahl der Indexseiten.

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ührungsplan

Der 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 explain, um den Ausführungsplan der SQL-Anweisung anzuzeigen, und Sie können die folgenden Informationen erhalten:

  • id: die Ausführungsreihenfolge der Abfrage in der verschachtelten Abfrage
  • possible_keys: die Indizes, die verwendet werden können Diese Abfrage
  • Schlüssel: tatsächlich verwendeter Index
  • Zeilen: Ungefähr, wie viele Datenzeilen abgerufen werden müssen, um das Ergebnis zu erhalten
  • select_type Der Verbindungstyp zwischen mehreren Tabellen
  • extra: Zusätzliche Informationen, ob Indexabdeckung vorhanden ist, Index Pushdown usw.

Speicher-Engine

Der 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
  • unterstützt keine Transaktionen, unterstützt nur Zeilensperren, geeignet für schreibgeschützte Datenszenarien

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

    Bis jetzt habe ich endlich erfahren, dass eine Abfrageanweisung diese Reihe von Vorgängen durchlaufen muss, nachdem sie an den MySQL-Server übergeben wurde. Der Parser überprüft die Syntax und das Lexikon der SQL-Anweisung Fehler, es wird basierend auf Schlüsselwortknoten in Teile aufgeteilt und bildet schließlich einen Analysebaum. Der Präprozessor überprüft die Semantik der SQL-Anweisung, prüft, ob die SQL-Anweisung mehrdeutig ist, ob die Felder vorhanden sind usw , und bilden Sie einen neuen Analysebaum
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!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!