Wie die MySQL Select-Anweisung ausgeführt wird

Wie die MySQL Select-Anweisung ausgeführt wird

Wie wird die MySQL-Select-Anweisung ausgeführt?

Ich habe mir vor Kurzem „MySQL 45 Lectures“ von Herrn Ding Qi auf Geek Time angesehen. Ich fand die Vorlesung wirklich gut. Ich möchte einige meiner Erfahrungen mit MySQL mit Ihnen teilen. Interessierte Studenten können entsprechende Kurse erwerben, um zu lernen.

Was ich heute mit Ihnen teilen möchte, ist der Ausführungsprozess von „Select“ und „Update“.

Der Ausführungsprozess von select

Und ohne weitere Umschweife hier ein tolles Bild (von mir selbst gezeichnet).

Zunächst einmal können wir sehen, dass die gesamte Select-Anweisung aus drei Modulen besteht, darunter dem Client und MySQL. MySQL besteht aus der Server- und der Speicher-Engine-Seite. Die Server-Seite umfasst Konnektoren, Abfrage-Cache, Analysator, Optimierer, Executor und andere Teile. Die Speicher-Engine-Seite umfasst auch mehrere Speicher-Engines wie InnoDB, Myisam, Speicher usw.

Die Funktionen der einzelnen Module sind wie folgt:

Anschlüsse:

Die Aufgabe des Connectors besteht darin, eine Verbindung zum Client herzustellen, Berechtigungen abzufragen, Verbindungen aufrechtzuerhalten und zu verwalten usw. Wenn wir uns über die Befehlszeile anmelden und das Kennwort oder Konto falsch ist, gibt der Connector einen Zugriffsverweigerungsfehler zurück. Nachdem wir uns mit dem richtigen Konto und Kennwort bei MySQL angemeldet haben, fragt der Connector die Anmeldeberechtigungen des aktuellen Kontos ab. Alle nachfolgenden Vorgänge hängen von dieser Berechtigung ab.

Beachten Sie, dass eine Änderung der Berechtigungen des Kontos zu diesem Zeitpunkt keine Auswirkungen auf bestehende Verbindungen hat, sondern nur auf neu hinzugefügte Verbindungen.

Wenn der Client nach der Verbindung mit MySQL keine Vorgänge ausführt, trennt der Connector die Verbindung nach der durch den Parameter wait_timeout festgelegten Zeit. Es wird empfohlen, im Programm lange Verbindungen zu verwenden, um den Leistungsverlust durch das Herstellen von Verbindungen mit dem Client und MySQL zu verringern.

Abfrage-Cache:

Wenn der Client ein SQL eingibt und es auf den Abfragecache trifft, gibt MySQL das Ergebnis direkt zurück, ohne die folgende Reihe von Analysevorgängen auszuführen. Wenn es nicht trifft, wird der Prozess „Analyzer-Optimizer-Executor“ gestartet. Beim Abfrage-Caching sind noch zwei weitere Punkte zu beachten:

a. Der Abfragecache wird in MySQL 8.0 nicht mehr verwendet, da die Trefferquote des Abfragecaches im Allgemeinen niedrig ist und die Nachteile die Vorteile überwiegen.

b. In Szenarien mit hoher Parallelität wird empfohlen, den Abfragecache auszuschalten. Verwenden Sie beim Ausschalten query_cache_type=off oder query_cache_size=0.

c. Wenn Sie diese Funktion verwenden müssen, können Sie den Parameter query_cache_type auf DEMAND setzen. Auf diese Weise können Sie select sql_cache * from table verwenden, um die Verwendung des Abfragecaches zu erzwingen.

Analysator:

Wenn unsere Abfrage nicht tatsächlich den Abfragecache erreicht, müssen wir in die Analysephase eintreten. Die Hauptfunktionen des Analysators sind die lexikalische Analyse und die Syntaxanalyse, darunter:

Unter lexikalischer Analyse versteht man die Analyse von Auswahl, Aktualisierung, Änderung, Spaltennamen, Tabellennamen, Bibliotheksnamen usw. basierend auf SQL.

Bei der Syntaxanalyse geht es darum, zu analysieren, ob das von Ihnen geschriebene SQL der MySQL-Syntax entspricht. Bei Unzufriedenheit wird die Meldung „Sie haben einen Fehler xxx“ angezeigt.

Optimierer:

Die Aufgabe des Optimierers besteht darin, den besten Pfad für die SQL-Ausführung auszuwählen. Wenn beispielsweise mehrere Tabellen verknüpft werden, wählt der Optimierer die effizienteste Lösung zum Ausführen der Verknüpfungsabfrage. Hier ist ein Beispiel. Beispielsweise erstellen wir einen gemeinsamen Index von (a, b).

Wählen Sie * aus der Tabelle, wobei a=1 und b=1;

Wählen Sie * aus der Tabelle, wobei b=1 und a=1;

Diese beiden SQL-Anweisungen sind gleichwertig, da der Optimierer die folgende Anweisung in die obige umwandelt und so den gemeinsamen Index für Suchanfragen anwendet.

Antrieb:

Nachdem das SQL den Optimierer durchlaufen hat, gelangt es in den Executor. Vor der Ausführung des SQL müssen die Tabellenberechtigungen überprüft werden. Wenn eine Berechtigung vorliegt, wird die vom Speichermodul bereitgestellte Schnittstelle gemäß der Speichermoduldefinition der Tabelle verwendet, und schließlich werden die Daten an den Client zurückgegeben und auf neue Verbindungen gewartet.

Zu beachten ist hierbei, dass der Executor einmal aufgerufen wird und mehrere Zeilen innerhalb der Engine gescannt werden. Daher ist die Anzahl der von der Speicher-Engine gescannten Zeilen nicht genau gleich der Anzahl der untersuchten Zeilen.

Fragen und Antworten

F1: Warum wird die Berechtigungsprüfung nicht vor dem Optimierer durchgeführt?

A1: Manchmal sind die mit SQL-Anweisungen zu bearbeitenden Tabellen nicht nur diejenigen in der SQL-Anweisung. Ob es beispielsweise einen Auslöser gibt, kann erst in der Executor-Phase (Prozess) ermittelt werden. Vor der Optimierungsphase kann nichts getan werden

F2: Wo werden MySQL-Berechtigungen überprüft?

A2: Die Anmeldeberechtigung des Kontos wird im Connector-Modul überprüft. Die Betriebsberechtigung der Tabelle ist in zwei Fälle unterteilt. Wenn der Abfragecache getroffen wird, wird er überprüft, wenn der Abfragecache das Ergebnis zurückgibt, vor dem Optimierer. Wenn der Index nicht getroffen wird, wird die Berechtigungsüberprüfung im Executor-Modul überprüft.

Oben finden Sie Einzelheiten zur Ausführung der MySQL Select-Anweisung. Weitere Informationen zur MySQL Select-Anweisung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion zur MySQL-Select-Optimierungslösung
  • MySQL-Beispiel-Tutorial: Ergebnisse auswählen, um ein Update durchzuführen
  • Beheben Sie das Problem, dass die Lese-/Schreibtrennung von MySQL dazu führt, dass Daten nach dem Einfügen nicht ausgewählt werden
  • Detailliertes Beispiel zur Verwendung der distinct-Methode in MySQL
  • Sollte ich zum Entfernen von Duplikaten in MySQL „distinct“ oder „group by“ verwenden?
  • Der Unterschied zwischen distinct und group by in MySQL
  • Lassen Sie uns ausführlich über die LIMIT-Anweisung in MySQL sprechen
  • Tutorial der MySQL-Reihe zum Verständnis der Verwendung der Schlüsselwörter „union“ (alles), „limit“ und „exists“
  • Die Auswirkungen des Limits auf die Abfrageleistung in MySQL
  • Verwendung von „Select“, „Distinct“ und „Limit“ in MySQL

<<:  Detaillierte Beschreibung von Shallow Copy und Deep Copy in js

>>:  Problemanalyse der Verwendung einer Idee zum Erstellen eines Springboot-Initialisiererservers

Artikel empfehlen

Implementierung der Anmeldeseite des tatsächlichen Kampfprotokolls von Vue

Inhaltsverzeichnis 1. Vorbereitende Maßnahmen 1.1...

Das Vue-Projekt realisiert Anmelde- und Registrierungseffekte

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung der Nginx-Lastverteilung/SSL-Konfiguration

Was ist Lastenausgleich? Wenn ein Domänenname auf...

Eingebettetes Transplantations-Docker-Fehlerproblem (Zusammenfassung)

Nach einer langen Zeit der Transplantation und In...

So implementieren Sie den Dienststatus zur Nginx-Konfigurationserkennung

1. Überprüfen Sie, ob das Modul „Status prüfen“ i...

JS-Code zum Erzielen eines Seitenwechseleffekts

In diesem Artikelbeispiel wird der spezifische Co...

Grundlagen und Beispiele zur TypeScript-Aufzählung

Inhaltsverzeichnis Vorwort Was sind Enumerationen...

MySQL-8.0.26 Konfigurationsgrafik-Tutorial

Vorwort: Vor kurzem hat das Unternehmensprojekt d...