Lassen Sie uns zunächst kurz überprüfen, was MySQL hinter einer Abfrageanweisung macht:
Als Nächstes werden wir auf die einzelnen Schritte dieses Prozesses näher eingehen. 1. Kommunikationsmethode zwischen Client und ServerDie Kommunikation zwischen Client und Server ist eine Halbduplex-Kommunikation, d. h., immer nur eine Partei kann gleichzeitig Daten an die andere Partei senden. Daher kann der Client nach dem Senden der Abfrageanforderung nur darauf warten, dass der Server die Abfrageergebnisse zurückgibt. Er muss warten, bis alle zurückgegebenen Daten empfangen wurden, bevor er mit dem nächsten Schritt fortfahren kann. Er kann das Senden nicht unterbrechen oder die Verbindung während des Server-Sendevorgangs trennen. 2. Abfrage-CacheWenn der Abfragecache aktiviert ist, prüft MySQL vor dem Parsen einer Abfrageanweisung zunächst, ob die Abfrage auf die Daten im Abfragecache trifft. Diese Prüfung erfolgt mithilfe einer Groß-/Kleinschreibung beachtenden Hash-Tabelle. Wenn die Abfrage den Cache erreicht, wird das Ergebnis direkt aus dem Cache abgerufen und an den Client zurückgegeben. MySQL führt die folgenden Vorgänge nicht mehr aus, d. h. die Abfrageanweisung wird nicht analysiert, es wird kein Ausführungsplan generiert und sie wird nicht ausgeführt. 3. AbfrageoptimierungsverarbeitungDiese Verknüpfung ist möglicherweise die komplizierteste Verknüpfung im gesamten Abfrageausführungsprozess, der in drei Schritte unterteilt werden kann: SQL-Analyse, Vorverarbeitung und Optimierung des SQL-Ausführungsplans. (1) Syntaxparser und Vorverarbeitung Dieser Prozess dient dazu, die Syntax der von uns übergebenen SQL-Anweisung zu überprüfen und die Abfrageberechtigungen zu verifizieren. Binghui generiert einen „Analysebaum“. (2) Wenn der Abfrage-Optimierer diesen Schritt erreicht, beweist er, dass es keine Probleme mit der Syntax unserer Anweisung gibt. Eine Abfrage kann mehrere Ausführungspläne haben, die korrekte Ergebnisse zurückgeben können. Dieser Schritt dient der Auswahl des optimalen Ausführungsplans. mysql> STATUS ANZEIGEN WIE 'last_query_cost'; MySQL gibt Daten zu den Ausführungskosten zurück: +-----------------+----------+ | Variablenname | Wert | +-----------------+----------+ | Kosten der letzten Abfrage | 0,549000 | +-----------------+----------+ Es ist jedoch anzumerken, dass die minimalen „Kosten“ hier nicht die schnellste Abfragegeschwindigkeit bedeuten. Das heißt, die Beurteilung der Qualität einer Abfrageanweisung anhand der „Kosten“ ist manchmal unzuverlässig. Die Optimierungsstrategien des Optimierers können grob in zwei Typen unterteilt werden: statische Optimierung und dynamische Optimierung. Bei der statischen Optimierung wird der zuvor erstellte Parsebaum direkt analysiert. So kann beispielsweise die Where-Bedingung durch einige algebraische Transformationen in eine andere äquivalente Form umgewandelt werden. Die statische Optimierung bleibt nach der ersten Ausführung wirksam und ändert sich nicht, selbst wenn die Abfrage wiederholt mit unterschiedlichen Parametern ausgeführt wird. Sie kann als eine Art „Optimierung der Kompilierungszeit (Vorverarbeitungszeit)“ betrachtet werden. Die dynamische Optimierung bezieht sich auf den Abfragekontext und muss bei jeder Abfrage neu ausgewertet werden. Sie kann als eine Art „Laufzeitoptimierung“ betrachtet werden. Im Folgenden sind einige der Optimierungstypen aufgeführt, die MySQL verarbeiten kann:
Manchmal ist die Reihenfolge der verknüpften Tabellen in der von uns angegebenen Abfrageanweisung für die Abfrageeffizienz möglicherweise nicht optimal. In diesem Fall kann MySQL uns automatisch dabei helfen, die Reihenfolge der verknüpften Tabellen anzupassen, um die Effizienz zu verbessern.
Nicht alle OUT JOIN-Anweisungen müssen als äußere Verknüpfungen ausgeführt werden. MySQL kann dies erkennen und die Abfrage so umschreiben, dass die Reihenfolge der Verknüpfungen angepasst wird.
Verwenden Sie einige gleichwertige Anweisungen, um die Anzahl der Vergleiche zu reduzieren und einige Bedingungen zu entfernen, die immer oder nicht immer wahr sind. Beispielsweise wird (5=5 UND a>5) als a>5 umgeschrieben; wenn (a5 UND b=c UND a=5).
Indizes und die Nullbarkeit von Spalten können bei der Optimierung dieses Ausdruckstyps helfen. Wenn Sie beispielsweise nach dem Minimalwert suchen, können Sie den Index verwenden, um direkt den Datensatz ganz links zu finden. Auf diese Weise müssen Sie nicht die gesamte Tabelle abfragen, sondern können sie durch eine Konstante ersetzen.
Wenn die Spalten im Index alle in der Abfrage benötigten Spalten enthalten, verwendet MySQL den Index, um die erforderlichen Daten zurückzugeben, ohne die entsprechenden Datenzeilen abzufragen.
MySQL kann die Abfrage immer sofort beenden, wenn es feststellt, dass die Abfrage die Anforderungen erfüllen kann. Ein typisches Beispiel ist die Verwendung der LIMIT-Klausel. An diesem Punkt hat die MySQL-Serverebene einen optimalen Ausführungsplan basierend auf der gegebenen Abfrageanweisung erstellt. Wir müssen jedoch wissen, dass die Reihe von Vorgängen, die wir bisher durchgeführt haben, alle auf der Serverebene ausgeführt werden und dass die Daten nicht auf dieser Ebene gespeichert werden. Daher müssen wir unseren optimalen Ausführungsplan zur Suche in die tatsächliche Speicher-Engine übertragen. Dies führt uns zu unserem nächsten Schritt: dem Abrufen der entsprechenden statistischen Informationen von der Speicher-Engine. 4. Abfrageausführungs-EngineIm Vergleich zur Abfrageoptimierungsphase ist die Abfrageausführungsphase nicht so kompliziert. MySQL führt die im Ausführungsplan angegebenen Anweisungen einfach Schritt für Schritt aus. 5. Ergebnisse an den Kunden zurückgeben Der letzte Schritt der Abfrageausführung besteht darin, die Ergebnisse an den Client zurückzugeben. Auch wenn die Abfrage keinen Ergebnissatz an den Client zurückgeben muss, gibt MySQL dennoch einige Informationen zur Abfrage zurück, z. B. die Anzahl der von der Abfrage betroffenen Zeilen. Oben finden Sie eine ausführliche Erläuterung des Ausführungsprozesses von MySQL-Abfrageanweisungen. Weitere Informationen zu MySQL-Abfrageanweisungen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Scrollen von HTML-Marquee-Zeichenfragmenten
>>: Lösung für den Docker-Container, der keine Schreibberechtigung für das Host-Verzeichnis hat
Ergebnisse erzielenImplementierungscode html <...
animation-name Animationsname, kann mehrere Werte...
Betriebssystem: Alibaba Cloud ESC-Instanz centos7...
Inhaltsverzeichnis veranschaulichen 1. Blob-Objek...
Postfix ist ein kostenloser und quelloffener MTA ...
Vorwort: Bei der Projektentwicklung werden in ein...
Im WeChat-Applet-Projekt umfasst das Entwicklungs...
In diesem Artikel wird die Installations- und Kon...
Wenn Sie eine E-Mail in einem Shell-Skript erstel...
Hier stellen wir das Wissen über Formularelemente...
Inhaltsverzeichnis 1. Konfigurieren Sie Bridging ...
Als ich kürzlich jQuery lernte, stieß ich auf die...
Wenn MySQL normal ausgeführt wird, ist es nicht s...
Entwicklungstrends: html (Hypertext-Markup-Sprache...
In der Vergangenheit wurde Float häufig für das L...