Wie Sie auf dem Bild sehen können, ist die MySQL-Architektur hauptsächlich in Serverschicht und Storage-Engine-Schicht unterteilt.
Serverschicht ist in Connectors, Caches, Analysatoren, Optimierer und Executoren unterteilt. In dieser Schicht werden alle speicherübergreifenden Engine-Funktionen implementiert, z. B. Funktionen, gespeicherte Prozeduren, Trigger, Ansichten usw.
Speicher-Engines sind steckbar. Zu den gängigen Speicher-Engines gehören MyISAM, InnoDB, Memory usw. Der Standardwert war MyISAM vor MySQL 5.5 und der Standardwert danach InnoDB.
Connector wird hauptsächlich zur Verwaltung von Clientverbindungen und zur Authentifizierung der Benutzeridentität verwendet.
TCP-Protokoll wird für die Verbindung zwischen Client und Server verwendet. Die Verbindung wird durch einen TCP-Handshake hergestellt und auf dieser Grundlage startet der Connector die Authentifizierung.
> mysql -hlocalhost -P3306 -uroot -p
Wenn die Authentifizierung fehlschlägt, tritt der Fehler FEHLER 1045 (28000): Zugriff verweigert für Benutzer „root“@‘localhost‘ (mit Passwort: JA) auf.
Sie können die Informationen aller Verbindungen im System über den Befehl show Processlist anzeigen:
Die Befehlsspalte stellt den Verbindungsstatus dar, Daemon stellt den Hintergrundprozess dar, Query stellt die Abfrage dar und Sleep stellt den Leerlauf dar Verbindung.
Die vom Client angeforderte Abfrage greift nicht direkt auf die Speicher-Engine zu, sondern prüft zunächst, ob das Ergebnis im Cache vorhanden ist. Wenn das Ergebnis zwischengespeichert wurde, geben Sie es direkt zurück. Andernfalls führen Sie den Abfragevorgang erneut aus und speichern Sie das Ergebnis zwischen, nachdem die Abfrage abgeschlossen ist.
Der ungültige Cache wird gelöscht, wenn sich die Datentabelle ändert, z. B. bei Einfüge-, Aktualisierungs-, Lösch- und Änderungsvorgängen.
Bei häufig wechselnden Datentabellen ist die Cache-Trefferquote sehr niedrig. Da die Verwendung von Cache die Lese- und Schreibleistung verringert, wurde das Cache-Modul in Versionen nach MySQL 8.0 entfernt.
Sie können mit dem folgenden Befehl überprüfen, ob der Cache aktiviert ist:
Der Analysator führt hauptsächlich lexikalische Analyse und grammatische Analyse für SQL-Anweisungen durch.
Für MySQL-Schlüsselwörter und die Bedeutung jedes Wortes ist eine lexikalische Analyse erforderlich. Führen Sie dann eine Syntaxanalyse durch, um festzustellen, ob die SQL-Anweisung die MySQL-Syntaxanforderungen erfüllt.
MySQL identifiziert Spaltennamen, Tabellennamen, Wo, Auswählen/Aktualisieren/Einfügen und andere MySQL-Schlüsselwörter in der Zeichenfolge, bestimmt, ob SQL die Grammatik gemäß den Grammatikregeln erfüllt, und generiert schließlich einen abstrakten Syntaxbaum (AST).
Zum Beispiel: Wenn Sie das Schlüsselwort „less where“ in die SQL-Anweisung schreiben, wird ein Fehler angezeigt.
mysql> select * from user id=1; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=1' at line 1
Bevor die SQL-Anweisung tatsächlich ausgeführt wird, muss sie vom Optimierer verarbeitet werden.
Der uns bekannte Ausführungsplan (Explain) wird vom Optimierer generiert.
Der Optimierer hat hauptsächlich zwei Funktionen: logische Optimierung und physikalische Optimierung.
Die logische Optimierung führt hauptsächlich das Umschreiben äquivalenter Prädikate, bedingte Vereinfachung, Unterabfrageeliminierung, Verbindungseliminierung, semantische Optimierung, Gruppenzusammenführung, Auswahl-Pushdown, Indexoptimierungsabfrage, Tabellenabfrageersetzungsansichtsabfrage, Union-Ersetzung oder -Operation usw. durch.
Durch den Greedy-Algorithmus und das Kostenschätzungsmodell besteht der Hauptzweck der physikalischen Optimierung darin, die Kosten jeder Ausführungsmethode abzuschätzen. Und verwenden Sie Indizes, um Tabellenverbindungen zu optimieren und schließlich Abfrageausführungspläne zu generieren.
Im Anhang finden Sie das Architekturdiagramm des MySQL-Optimierers. Sie können den Optimierungsprozess deutlich sehen:
Der Executor ruft die Speicher-Engine-Schnittstelle auf, um die SQL-Abfrage tatsächlich auszuführen. Die Ausführung der SQL-Anweisung endet, nachdem die von der Speicher-Engine zurückgegebenen Abfrageergebnisse abgerufen und an den Client zurückgegeben wurden.
Das obige ist der detaillierte Inhalt vonBeispielanalyse für das MySQL-Architekturdesign. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!