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ührungsprozessDer gesamte Ausführungsprozess von MySQL ist in der folgenden Abbildung dargestellt: 1.1: AnschlüsseDie 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, 1:
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: ZwischenspeicherDie 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: AnalysatorDie 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: 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: OptimiererDie 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: AktuatorIn 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ührungsstatusMit 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ührungsreihenfolgeTatsä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: vonDer 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:wobeiWobei 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 nachGroup 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:HabenAggregieren 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ählenWä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:UnterscheidenDistinct 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 nachEs 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:GrenzeLimit 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. ZusammenfassungDieser 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:
|
<<: K3s-Erste-Schritte-Handbuch - Detailliertes Tutorial zum Ausführen von K3s in Docker
>>: Was ich beim Aufbau meines eigenen Blogs gelernt habe
Quelle des Problems Wie wir alle wissen, erzeugt ...
In dieser Anmerkung beschreiben wir kurz Was ist ...
Inhaltsverzeichnis Einführung MySQL-Hochverfügbar...
In diesem Artikel werden einige der Techniken ausf...
Amtliche Dokumentation: https://dev.mysql.com/doc...
1. Befehlseinführung nl (Anzahl der Zeilen) fügt ...
1. Zwei Arten der DMA-Zuordnung 1.1. Konsistente ...
Hinweis: Diese Methode ist nur auf WebKit-basiert...
1. Migrationsmethode für virtuelle KVM-Maschinen ...
Gestalten Sie die oben gezeigte Webseite: <!DOC...
In der fünften Ausgabe von Web Skills wird ausdrü...
Dieser Artikel veranschaulicht anhand eines Beisp...
Bedarfsszenario: Der Chef bat mich, den Crawler z...
Die Grafikkarte meines Computers ist eine Nvidia-...
Inhaltsverzeichnis Vorwort InnoDB-Speicherarchite...