Eine kurze Erläuterung des MySQL-Ausführungsprozesses und der MySQL-Ausführungssequenz

Eine kurze Erläuterung des MySQL-Ausführungsprozesses und der MySQL-Ausführungssequenz

Vorwort: MySQL ist etwas, mit dem wir bei unserer Entwicklung fast täglich konfrontiert sind. Als Datenquelle in der Entwicklung ist MySQL für das Speichern von Daten sowie das Lesen und Schreiben von Daten verantwortlich. Da das Erlernen und Verstehen von MySQL von entscheidender Bedeutung ist, stellt sich die Frage, welcher Prozess durchlaufen wird, wenn wir eine SQL-Anweisung auf dem Client initiieren und detaillierte Abfragedaten angezeigt werden? Wie verarbeitet der MySQL-Server Anfragen und führt SQL-Anweisungen aus? In diesem Blog wird dieses Problem untersucht:

1: MySQL-Ausführungsprozess

Der gesamte Ausführungsprozess von MySQL ist in der folgenden Abbildung dargestellt:

1.1: Anschlüsse

Die Hauptaufgaben eines Connectors sind:

① Verantwortlich für die Kommunikation mit dem Client, handelt es sich um den Halbduplex-Modus, was bedeutet, dass zu einem festgelegten Zeitpunkt nur der Client den Server anfordern kann oder der Server Daten an den Client senden kann, jedoch nicht gleichzeitig. MySQL ist über TC/IP mit dem Client verbunden

②Überprüfen Sie, ob Konto und Passwort des anfordernden Benutzers korrekt sind. Wenn Konto und Passwort falsch sind, wird ein Fehler gemeldet: Zugriff für Benutzer „root“@„localhost“ verweigert (mit Passwort: JA)

③Wenn das Benutzerkonto und das Passwort überprüft wurden, werden die Berechtigungen des aktuellen Benutzers in der MySQL-eigenen Berechtigungstabelle abgefragt:

In MySQL gibt es vier Tabellen, die Berechtigungen steuern,分別為user表,db表,tables_priv表,columns_priv表, Der Überprüfungsprozess der MySQL-Berechtigungstabelle ist wie folgt:

1: User表: speichert Benutzerkontoinformationen und Berechtigungen auf globaler Ebene (alle Datenbanken), wodurch bestimmt wird, welche Benutzer von welchen Hosts auf die Datenbankinstanz zugreifen können

  • Db-Tabelle: speichert Berechtigungen數據庫級別, die bestimmen, welche Benutzer von welchen Hosts auf diese Datenbank zugreifen können
  • Tables_priv-Tabelle:存放表級別的權限, die bestimmen, welche Benutzer von welchen Hosts auf diese Tabelle in der Datenbank zugreifen können
  • Columns_priv-Tabelle:存放列級別的權限, die bestimmen, welche Benutzer von welchen Hosts auf dieses Feld in der Datenbanktabelle zugreifen können
  • Procs_priv-Tabelle:存放存儲過程和函數

2: Zunächst wird in der Benutzertabelle aus den drei Feldern Host, Benutzer und Passwort ermittelt, ob die verbundene IP, der Benutzername und das Passwort vorhanden sind. Wenn dies der Fall ist, ist die Überprüfung erfolgreich.

3: Nach der Identitätsauthentifizierung werden Berechtigungen in der Reihenfolge Benutzer, Datenbank, Tabellenpriv. und Spaltenpriv. zugewiesen und überprüft. Das heißt, überprüfen Sie zuerst den globalen Berechtigungstabellenbenutzer. Wenn die entsprechende Berechtigung im Benutzer Y ist, ist die Berechtigung dieses Benutzers für alle Datenbanken Y und db, tables_priv und columns_priv werden nicht mehr überprüft. Wenn sie N ist, überprüfen Sie die spezifische Datenbank, die diesem Benutzer in der db-Tabelle entspricht, und erhalten Sie die Berechtigung Y in db. Wenn db N ist, überprüfen Sie die spezifische Tabelle, die dieser Datenbank in tables_priv entspricht, und erhalten Sie die Berechtigung Y in der Tabelle und so weiter.

4: Wenn die Berechtigungsüberprüfung in einem Prozess fehlschlägt, wird ein Fehler gemeldet

1.2: Zwischenspeicher

Die Hauptfunktion des MySQL-Cache besteht darin, die Abfrageeffizienz zu verbessern. Der Cache wird in Form einer Hash-Tabelle mit Schlüssel und Wert gespeichert. Der Schlüssel ist eine bestimmte SQL-Anweisung und der Wert ist eine Sammlung von Ergebnissen. Wenn der Cache nicht gefunden werden kann, wird mit dem Analyseschritt fortgefahren. Wenn der Cache gefunden wird, wird er direkt an den Client zurückgegeben. Es ist jedoch zu beachten, dass der Cache nach Version 8.0 von MySQL offiziell gelöscht wurde. Der Grund für das Löschen ist, dass der Abfragecache sehr häufig ungültig gemacht wird. In einer Umgebung mit mehr Schreib- als Lesevorgängen wird der Cache häufig hinzugefügt und ungültig gemacht. Bei einigen Datenbanken mit hohem Aktualisierungsdruck ist die Trefferquote des Abfragecaches sehr niedrig. Um den Cache aufrechtzuerhalten, kann MySQL bestimmte Skalierbarkeitsprobleme haben. Derzeit ist es in Version 5.6 standardmäßig deaktiviert. Ein empfehlenswerterer Ansatz besteht darin, den Cache auf dem Client zu platzieren, wodurch die Leistung um etwa das Fünffache verbessert wird.

1.3: Analysator

Die Hauptfunktion des Analysators besteht darin, die vom Client gesendeten SQL-Anweisungen zu analysieren, was Vorverarbeitung und Parsing umfasst. In dieser Phase wird die Semantik der SQL-Anweisungen analysiert und Schlüsselwörter und Nicht-Schlüsselwörter werden extrahiert und geparst, um einen Parsebaum zu bilden. Zu den spezifischen Schlüsselwörtern gehören unter anderem die folgenden: select/update/delete/or/in/where/group by/having/count/limit usw. Wenn während der Analyse ein Syntaxfehler gefunden wird, wird eine Ausnahme direkt an den Client gesendet: FEHLER: In Ihrer SQL-Syntax liegt ein Fehler vor.

Beispiel: select * from user where userId =1234;

Im Analysator werden die Schlüsselwörter wie „select from where“ extrahiert und über den semantischen Regelgenerator abgeglichen. MySQL ermittelt automatisch die Schlüsselwörter und Nicht-Schlüsselwörter und identifiziert die übereinstimmenden Felder und benutzerdefinierten Anweisungen des Benutzers. In dieser Phase werden auch einige Prüfungen durchgeführt: Beispielsweise wird geprüft, ob die Benutzertabelle in der aktuellen Datenbank vorhanden ist. Wenn das Feld userId in der Benutzertabelle nicht vorhanden ist, wird auch ein Fehler gemeldet: unbekannte Spalte in der Feldliste.

1.4: Optimierer

Die Möglichkeit, in die Optimierungsphase einzutreten, bedeutet, dass die SQL-Anweisung den Standard-Semantikregeln von MySQL entspricht und ausgeführt werden kann. In dieser Phase wird hauptsächlich die SQL-Anweisung optimiert, basierend auf dem Ausführungsplan die beste Wahl getroffen, der entsprechende Index abgeglichen und der beste Ausführungsplan ausgewählt. Ein typisches Beispiel ist beispielsweise dieses:

Tabelle T, erstellt einen gemeinsamen Index für die Spalten A, B und C. Bei der Abfrage lautet das SQL-Abfrageergebnis: select xx where B=x and A=x and C=x. Viele Leute denken, dass der Index nicht verwendet wird, aber tatsächlich wird er verwendet. Obwohl der Index dem Prinzip „ganz links“ entsprechen muss, um verwendet zu werden, optimiert der Optimierer dieses SQL im Wesentlichen automatisch zu: where A=x and B=x and C=X. Diese Optimierung ermöglicht es der darunterliegenden Ebene, den Index abzugleichen. Gleichzeitig wird es in dieser Phase automatisch gemäß dem Ausführungsplan vorverarbeitet. MySQL berechnet die beste Zeit für jede Ausführungsmethode und bestimmt schließlich ein ausgeführtes SQL, das an den endgültigen Ausführer übergeben wird.

1.5: Aktuator

In der Executor-Phase wird die Speicher-Engine-API aufgerufen. Die API ruft die Speicher-Engine auf. Es gibt hauptsächlich die folgenden Speicher-Engines, aber MyISAM und InnoDB werden häufig verwendet:

Die Engine hieß zuvor: Table Processor (eigentlich denke ich, dass dieser Name die Bedeutung ihrer Existenz besser zum Ausdruck bringt). Sie ist für die Verarbeitung bestimmter Datendateien, die Analyse der SQL-Semantik wie Auswählen oder Aktualisieren und die Ausführung bestimmter Vorgänge verantwortlich. Nach der Ausführung wird der jeweilige Vorgang im Binärprotokoll aufgezeichnet. Zu beachten ist, dass die Auswahl nicht im Binärprotokoll aufgezeichnet wird, sondern nur die Aktualisierung/Lösch-/Einfügungsoperation. Das Update wird eine zweiphasige Commit-Methode verwenden, und die Datensätze befinden sich alle im Redolog

2: Ausführungsstatus

Mit dem Befehl „show full processlist“ können Sie alle Verarbeitungsprozesse anzeigen, die hauptsächlich den folgenden Status enthalten, der den Status des Servers angibt, der den Client verarbeitet. Der Status umfasst den Prozess vom Client, der die Anforderung initiiert, bis zur Verarbeitung durch den Hintergrundserver, einschließlich des Sperrvorgangs, statistischer Informationen zur Speicher-Engine, Sortieren von Daten, Durchsuchen von Zwischentabellen, Senden von Daten usw. Es deckt alle Zustände von MySQL ab, deren spezifische Bedeutungen wie folgt sind:

Drei: SQL-Ausführungsreihenfolge

Tatsächlich wird SQL nicht von vorne nach hinten oder von links nach rechts in der Reihenfolge ausgeführt, in der wir es schreiben. Es wird in einer festen Reihenfolge analysiert. Seine Hauptfunktion besteht darin, die Ergebnisse der vorherigen Phase zur Verwendung in der nächsten Phase zurückzugeben. SQL verfügt während der Ausführung über verschiedene temporäre Zwischentabellen, im Allgemeinen in der folgenden Reihenfolge:

Beispiel: Wähle eine eindeutige s.id aus T t, verbinde S s mit t.id=s.id, wobei t.name="Yrion", Gruppiere nach t.mobile mit count(*)>2, sortiere nach s.create_time-Limit 5;

3.1: von

Der erste Schritt besteht darin, die Tabelle nach dem Schlüsselwort „from“ auszuwählen. Dies ist gleichzeitig der erste Schritt der SQL-Ausführung: Es wird angegeben, welche Tabelle aus der Datenbank ausgeführt werden soll.

Beispielbeschreibung: In diesem Beispiel suchen wir zunächst die Tabelle T aus der Datenbank

3.2: Mitmachen

„join“ gibt die zu verknüpfende Tabelle an und „on“ ist die Bedingung für die Verbindung. Die auszuführenden Datenbanktabellen T und S werden über „from“ und „join on“ ausgewählt, ein kartesisches Produkt erzeugt und eine temporäre Zwischentabelle Temp1 erstellt, die T und S zusammenführt. on: Bestimmen Sie die Bindungsbeziehung der Tabelle und generieren Sie durch on eine temporäre Zwischentabelle Temp2.

Beispielbeschreibung: Suchen Sie nach Tabelle S, generieren Sie eine temporäre Zwischentabelle Temp1 und suchen Sie dann die Teile der Tabelle T mit der gleichen ID wie S, um die Tabelle Temp2 zu erstellen, die alle Daten mit der gleichen ID wie T enthält.

3.3:wobei

Wobei Filtern bedeutet, wird gemäß den Bedingungen nach wo gefiltert und die erforderlichen Daten aus der temporären Zwischentabelle Temp2 werden gemäß den Werten der angegebenen Felder gefiltert (wenn ein und-Verbinder vorhanden ist, wird eine gemeinsame Filterung durchgeführt). Beachten Sie, dass, wenn in dieser Phase keine Daten gefunden werden, diese direkt an den Client zurückgegeben werden und nicht weiter ausgeführt werden. Dieser Prozess generiert eine temporäre Zwischentabelle Temp3. Beachten Sie, dass Sie in where keine Aggregatfunktionen verwenden können. Aggregatfunktionen sind hauptsächlich (min\max\count\sum und andere Funktionen)

Beispielbeschreibung: Suchen Sie die Daten der Tabelle T mit dem Namen „Yrion“ in der temporären Tabellensammlung temp2. ​​Nach dem Auffinden der Daten werden diese zu einer temporären Zwischentabelle Temp3, die alle Tabellendaten mit der Namensspalte „Yrion“ enthält.

3.4: Gruppieren nach

Group by bedeutet Gruppieren, und die temporäre Tabelle Temp3 wird nach dem Filtern nach der Where-Bedingung nach festen Feldern gruppiert, um eine temporäre Zwischentabelle Temp4 zu erzeugen. Dabei ändert sich nur die Reihenfolge der Daten, die Gesamtdatenmenge ändert sich nicht. Die Daten in der Tabelle liegen in Form von Gruppen vor.

Beispielbeschreibung: Gruppieren Sie Mobilgeräte in den Daten der Tabelle Temp3, suchen Sie dieselben Mobilgerätedaten und fügen Sie sie dann zusammen, um die temporäre Tabelle Temp4 zu generieren.

3.5:Haben

Aggregieren Sie die temporäre Zwischentabelle Temp4, die gezählt werden kann, und generieren Sie dann die Zwischentabelle Temp5. In dieser Phase können Sie den Alias ​​in der Auswahl verwenden

Beispielbeschreibung: Suchen Sie in der temporären Tabelle temp4 nach Daten mit mehr als 2 Einträgen. Wenn es weniger als 2 sind, werden sie direkt verworfen und anschließend eine temporäre Zwischentabelle temp5 generiert.

3.6:Auswählen

Wählen Sie die abzufragenden Daten aus der gruppierten und aggregierten Tabelle aus. Wenn es sich um * handelt, werden sie als alle Daten analysiert und eine Zwischentabelle Temp6 wird generiert.

Beispielbeschreibung: In diesem Stadium wird die ID in der S-Tabelle der temporären Aggregationstabelle temp5 gefiltert, um Temp6 zu generieren. Zu diesem Zeitpunkt enthält temp6 nur die ID-Spaltendaten der S-Tabelle und name="Yrion". Die Daten mit einer Zahl größer als 2 in der mobilen Gruppierung

3.7:Unterscheiden

Distinct entfernt Duplikate aus allen Daten. Wenn Min- und Max-Funktionen vorhanden sind, wird die Feldfunktionsberechnung durchgeführt und anschließend eine temporäre Tabelle Temp7 generiert.

Beispielbeschreibung: In dieser Phase werden die Daten in temp5 dedupliziert. Die Engine-API ruft die Deduplizierungsfunktion auf, um die Daten zu filtern, und behält schließlich nur die Daten bei, bei denen die ID zum ersten Mal erscheint, und generiert dann eine temporäre Zwischentabelle temp7

3.8:Sortieren nach

Es wird der Reihe nach oder in umgekehrter Reihenfolge gemäß Temp7 sortiert und dann in die temporäre Zwischentabelle Temp8 eingefügt. Dieser Vorgang ist ressourcenintensiver.

Beispielbeschreibung: Dadurch werden alle Daten in der temporären Tabelle temp7 nach Erstellungszeit (create_time) sortiert, und es gehen dabei weder Spalten noch Zeilen verloren.

3.9:Grenze

Limit paginiert die Zwischentabelle Temp8, generiert eine temporäre Zwischentabelle Temp9 und gibt sie an den Client zurück.

Beispielbeschreibung: Sortieren Sie die Daten in temp7, nehmen Sie dann die ersten fünf Datensätze und fügen Sie sie in die temporäre Tabelle Temp9 ein und geben Sie sie schließlich an den Client zurück

ps: Tatsächlich ist dieser Prozess nicht absolut so. MySQL wird in der Mitte einige Optimierungen durchführen, um den besten Optimierungseffekt zu erzielen, z. B. die Auswahl des gefundenen Datensatzes

IV. Zusammenfassung

Dieser Blog fasst den Ausführungsprozess von MySQL und die Ausführungsreihenfolge von SQL zusammen. Das Verständnis dieser Punkte hilft uns dabei, SQL-Anweisungen zu optimieren und den Verlauf von SQL-Anweisungen in MySQL vom Schreiben bis zur endgültigen Ausführung zu verstehen. Dies hilft uns dabei, SQL tiefer und detaillierter zu verstehen und unsere Fähigkeit zum Verständnis von Datenbanken zu verbessern. Gleichzeitig wird es eine gewisse Bedeutung für den Ausführungsprozess und das Schreiben von komplexem SQL haben.

Dies ist das Ende dieses Artikels über den MySQL-Ausführungsprozess und die MySQL-Abfolge. Weitere relevante Inhalte zum MySQL-Ausführungsprozess und zur MySQL-Abfolge finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Beispielanalyse der Ausführungsreihenfolge und Schreibreihenfolge von MySQL-Anweisungen
  • Beispielanalyse der MySQL-Codeausführungsstruktur [Sequenz-, Verzweigungs-, Schleifenstruktur]
  • Verstehen Sie einfach die Schreib- und Ausführungsreihenfolge von MySQL-Anweisungen
  • Ein kurzes Verständnis der MySQL SELECT-Ausführungsreihenfolge
  • Eine kleine Frage zur Ausführungsreihenfolge von SQL in MySQL
  • Detaillierte Erläuterung der Ausführung von SQL-Anweisungen (Übersicht über die MySQL-Architektur -> Abfrageausführungsprozess -> SQL-Analysereihenfolge)
  • Analyse der Anweisungsausführungsreihenfolge von SQL und MySQL

<<:  K3s-Erste-Schritte-Handbuch - Detailliertes Tutorial zum Ausführen von K3s in Docker

>>:  Was ich beim Aufbau meines eigenen Blogs gelernt habe

Artikel empfehlen

Zusammenfassung der Fallstricke beim Importieren von OVA-Dateien in VMware

Quelle des Problems Wie wir alle wissen, erzeugt ...

Grundlegendes zu MySQL-Clusterindizes und wie Clusterindizes wachsen

In dieser Anmerkung beschreiben wir kurz Was ist ...

Detaillierte Erläuterung der MySQL-Hochverfügbarkeitsarchitektur

Inhaltsverzeichnis Einführung MySQL-Hochverfügbar...

Welche Codes sollte ich beherrschen, wenn ich Webdesign lerne?

In diesem Artikel werden einige der Techniken ausf...

Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen

Amtliche Dokumentation: https://dev.mysql.com/doc...

So verwenden Sie den Linux-Befehl nl

1. Befehlseinführung nl (Anzahl der Zeilen) fügt ...

Detaillierte Erläuterung der Wissenspunkte der Linux-DMA-Schnittstelle

1. Zwei Arten der DMA-Zuordnung 1.1. Konsistente ...

CSS3 ändert den Bildlaufleistenstil des Browsers

Hinweis: Diese Methode ist nur auf WebKit-basiert...

Quellcode der HTML-Einstellungen für die Benutzerregistrierungsseite

Gestalten Sie die oben gezeigte Webseite: <!DOC...

Verwenden Sie CSS, um zwischen dem Dunkelmodus und dem Hellmodus zu wechseln

In der fünften Ausgabe von Web Skills wird ausdrü...

Warum MySQL das Löschen von Daten nicht empfiehlt

Inhaltsverzeichnis Vorwort InnoDB-Speicherarchite...