So wird eine Select-Anweisung in MySQL ausgeführt

So wird eine Select-Anweisung in MySQL ausgeführt

1. MySQL aus einer Makroperspektive analysieren

Schauen wir uns zunächst ein klassisches Bild an ( MySQL-Diagramm der logischen Architektur )

Der Client im obigen Bild kann direkt als PHP, Java usw. verstanden werden. Als Nächstes sehen Sie Verbindungen und Thread-Handling. Dieser Teil ist nicht nur auf MySQL beschränkt und die meisten Clients und Server haben eine ähnliche Struktur.

Daher kann MySQL im Allgemeinen in zwei Schichten unterteilt werden: Serverschicht und Speicher-Engine-Schicht.

Die Serverschicht umfasst hauptsächlich wichtige Module wie Verbindungsschicht, Abfragecache, Analysator, Optimierer, Executor usw. Diese Schicht umfasst auch den MySQL-Kern-API-Teil, wie häufig verwendete Formatierungszeit, Verschlüsselung usw.

Jeder ist mit der Speicher-Engine vertraut, da ich Sie in Interviews mehr als einmal nach den Unterschieden zwischen den Speicher-Engines Innodb und Myisam gefragt habe.

Haben Sie schon einmal darüber nachgedacht, warum MySQL über so viele Speicher-Engines verfügt?

Alle Technologien haben ihren Ursprung in aktuellen Problemen, und MySQL ist keine Ausnahme.

Die Architektur der Speicher-Engine von MySQL ist Plug-In-basiert, was bedeutet, dass sie nach Belieben umgeschaltet werden kann und nicht festgelegt ist. Darüber hinaus ist die Speicher-Engine von MySQL Version 5.5 bereits standardmäßig Innodb.

2. Wie viele Schwierigkeiten sind erforderlich, um eine SQL-Anweisung auszuführen?

Detailliertes MySQL-Architekturdiagramm

In der Abbildung ist außerdem ein bekanntes Stranger-Query-Cache-Modul zu sehen, das in MySQL 8.0 nicht mehr vorhanden ist.

Zunächst werfen wir einen allgemeinen Blick auf die Funktionsweise einer SQL-Anweisung in diesem Architekturdiagramm.

2-1-Anschluss

mysql -u root -p stellt eine Verbindung zum Datenbankbefehl her. Nach der Ausführung müssen Sie das Kennwort eingeben. Sobald der klassische TCP-Handshake abgeschlossen ist, kommt der Connector ins Spiel.

Wenn der Code falsch ist, wird „Zugriff verweigert für Benutzer ‚root‘@‚localhost‘ (mit Kennwort: JA, Fehlercode 1045)“ zurückgegeben.

Wenn die Verbindungsinformationen korrekt sind, werden die Berechtigungen des Benutzers basierend auf der von Ihnen eingegebenen Tabelle mit Benutzerzugriffsberechtigungen abgerufen. Hier muss klar sein, dass sich Ihre Berechtigungen nach erfolgreicher Anmeldung nicht ändern, selbst wenn andere Ihre Berechtigungen ändern, bis die Verbindung getrennt wird.

Wenn Sie nach dem Herstellen der Verbindung nichts tun, führen Sie „show processlist“ aus. Daraufhin wird ein Ruhezustand angezeigt, der auf eine leere Verbindung hinweist.

Wissen Sie, wie lange es dauert, bis die MySQL-Verbindung automatisch getrennt wird, wenn nach einer erfolgreichen Verbindung keine Vorgänge ausgeführt werden?

Sie können Show-Variablen wie „wait_timeout“ ausführen, um die Zeit anzuzeigen.

Wenn in MySQL keine spezielle Beschreibung vorhanden ist, sind alle Zeiten in Sekunden angegeben. Durch die Zeitumrechnung können wir erkennen, dass die leere Verbindung 8 Stunden dauert.

2-2 Abfrage-Cache

Was Sie beachten müssen, ist, dass MySQL 8.0 abgebrochen wurde. Dieses Problem wurde mehr als einmal erwähnt. Besonders diejenigen, die MySQL-Versionen unter 8.0 verwenden, sollten darauf achten! Wenn Sie auf 8.0 umsteigen, kann dieses Problem auftreten und Sie wissen nicht, wie Sie es lösen können.

Warum MySQL 8.0 das Query Cache-Modul abschafft

Das Design dieses Moduls verwendet die Abfrageanweisung als Schlüssel und das Ergebnis als Wert für die Zwischenspeicherung. Sobald die Tabelle aktualisiert ist, werden alle vorherigen Caches gelöscht. Es ist genauso schmerzhaft, als wenn der Code, den Sie mit viel Mühe geschrieben haben, nach dem Absenden von anderen überschrieben wird.

MySQL-Versionen unter 8.0 bieten einen Parameter query_cache_type = enmand, um zu steuern, ob der Abfragecache verwendet werden soll. Nach der Festlegung wird die Standard-Select-Anweisung nicht zwischengespeichert.

Wenn es in einigen Szenarien funktioniert, können Sie sql_cache nach dem Select-Schlüsselwort hinzufügen.

Wenn eine Select-Anweisung zuvor zwischengespeichert wurde, wird der Ergebnissatz direkt hier zurückgegeben, während eine Select-Anweisung, die nicht zwischengespeichert wurde, schwieriger wird und ihren langen Weg fortsetzen muss.

2-3 Analysator

Vor MySQL 8.0 wird vor dem Aufrufen des Analysators bestimmt, ob ein Cache erstellt werden soll. Nach MySQL 8.0 wird der Connector nach erfolgreicher Überprüfung direkt in den Analysator aufgerufen.

Der Analyzer soll, der wörtlichen Bedeutung nach, analysieren, was das auszuführende SQL-Statement ist und was dabei zu tun ist.

Führen Sie beispielsweise select * from user where id = 1 aus.

MySQL ermittelt zunächst, dass es sich um eine Abfrageanweisung auf Basis von select handelt, und identifiziert dann user als Tabellennamen und id als Feldnamen. Dieser Vorgang wird als lexikalische Analyse bezeichnet.

Im nächsten Schritt prüfen Sie, ob die SQL-Syntax korrekt ist, und führen eine Syntaxanalyse durch. Wenn die Syntax falsch ist, wird die Fehlermeldung „In Ihrer SQL-Syntax liegt ein Fehler vor“ angezeigt. Normalerweise wird der Fehler in der Nähe der Verwendung gefunden.

2-4 Optimierer

An diesem Punkt weiß MySQL, was Sie tun möchten, muss aber die beste Möglichkeit zur Ausführung auswählen.

Was optimieren Optimierer?

Beispielsweise : Welcher Index soll gewählt werden, wenn mehrere Indizes vorhanden sind, und die Verbindungsreihenfolge, wenn mehrere Tabellen verknüpft sind.

Jetzt fragen Sie sich vielleicht: Müssen Sie die Verbindungsreihenfolge beim Schreiben von SQL-Anweisungen nicht berücksichtigen, da der Optimierer die Verbindungsreihenfolge von Mehrfachtabellen-Assoziationen optimiert?

Natürlich nicht. Wenn Sie MySQL dabei helfen können, weniger Arbeit zu erledigen, tun Sie es so wenig wie möglich. Es ist immer noch ein Prinzip, kleine Tabellen zu verwenden, um große Tabellen zu steuern.

2-5 Stellantrieb

Diese SQL-Anweisung wird erst dann tatsächlich ausgeführt, wenn festgelegt ist, was zu tun ist und wie es zu tun ist. Zuerst wird eine Berechtigungsüberprüfung durchgeführt. Wenn keine Berechtigung vorliegt, wird direkt ein Berechtigungsfehler zurückgegeben. Andernfalls wird die von der entsprechenden Engine bereitgestellte Schnittstelle gemäß der in der Tabelle definierten Speicher-Engine verwendet.

Ausführungsflussdiagramm

Das obige Bild enthält alle Wissenspunkte im Text und ist auch das allgemeine Ausführungsflussdiagramm des gesamten MySQL.

Damit ist dieser Artikel über die Ausführung einer Select-Anweisung in MySQL abgeschlossen. Weitere Informationen zur Ausführung von MySQL-Select-Anweisungen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Python-Grundlagen: Detaillierte Erklärung der Python-Schleifensteuerungsanweisungen break/continue
  • Detaillierte Erklärung der anfänglichen if-Anweisung in der Sprache C
  • Einführung in die C-Sprache - Lernen Sie Selection, if- und Switch-Anweisungen sowie Codeblöcke
  • So ersetzen Sie if/else- und switch/case-Anweisungen durch tabellengesteuerte C++-Anweisungen
  • Mehrere gängige Flusssteuerungsanweisungen in der Sprache C
  • Ein Artikel zum Verständnis von JavaScript-Anweisungen
  • Python implementiert Switch/Case-Anweisung
  • Fortgeschrittenes Tutorial zur C-Sprache: Detaillierte Analyse von Fehlern in Schleifenanweisungen
  • Steueranweisungsschleife in der C-Sprache
  • Verwendungsanweisungen für CDATA-Tags in SQL-Anweisungen in MyBatis
  • Zusammenfassung der Verwendung von drei For-Schleifenanweisungen in JavaScript (for, for...in, for...of)
  • Einführung in das flexible Schreiben von Golang-Switch-Anweisungen
  • Grundlagen der C-Sprache: Drei wichtige Vorsichtsmaßnahmen bei Anweisungen in der C-Sprache

<<:  Detaillierte Schritte zum Erstellen eines Dateiservers in Windows Server 2012

>>:  Klicken Sie auf die untere rechte Ecke der CSS-Pseudoklasse, um ein Häkchen anzuzeigen, das den ausgewählten Beispielcode anzeigt

Artikel empfehlen

JavaScript zum Erzielen eines Vollbild-Seiten-Scrolleffekts

Nachdem ich mit der Lektüre von JavaScript DOM fe...

Docker stellt Containern dynamisch Ports zur Verfügung

Zeigen Sie die IP-Adresse des Containers an docke...

Beispielcode für HTML-Listenfeld, Textfeld und Dateifeld

Dropdown-Feld, Textfeld, Dateifeld Der obere Teil...

Detaillierter Beispielcode einer MySQL-Batch-Einfügeschleife

Hintergrund Als ich vor einigen Tagen Paging in M...

Der Unterschied zwischen HTML-Block-Level-Tags und Inline-Tags

1. Blockebenenelement: bezieht sich auf die Fähigk...

Detaillierte Schritte zum Erstellen eines Dateiservers in Windows Server 2012

Der Dateiserver ist einer der am häufigsten verwe...

Optimierung des MySQL Thread_Stack-Verbindungsthreads

MySQL kann nicht nur über das Netzwerk, sondern a...

Detaillierte Erklärung der Ansichtszusammenfassungsdefinition im Angular-Framework

Vorwort Als Front-End-Framework, das „für große F...

Detaillierte Erläuterung der Methode zum Vergleichen von Daten in MySQL

Wenn es eine Tabelle mit einem Feld „add_time“ gi...

So überwachen Sie Array-Änderungen in JavaScript

Vorwort Als ich zuvor „defineProperty“ vorgestell...