Heim > Datenbank > MySQL-Tutorial > Analyse der Reihenfolge der Anweisungsausführung in MySQL und der Abfrageverarbeitungsphase

Analyse der Reihenfolge der Anweisungsausführung in MySQL und der Abfrageverarbeitungsphase

不言
Freigeben: 2018-08-22 10:07:09
Original
1583 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Reihenfolge der Anweisungsausführung in MySQL und der Analyse der Abfrageverarbeitungsphase. Ich hoffe, dass er für Sie hilfreich ist.

MySQL-Anweisungen sind in insgesamt 11 Schritte unterteilt, wie in der Abbildung unten markiert. Die FROM-Operation wird immer zuerst und die LIMIT-Operation zuletzt ausgeführt. Bei jeder Operation wird eine virtuelle Tabelle generiert, die als Eingabe für die Verarbeitung verwendet wird. Diese virtuellen Tabellen sind für den Benutzer jedoch transparent, als Ergebnis wird jedoch nur die letzte virtuelle Tabelle zurückgegeben. Wenn die entsprechende Operation in der Anweisung nicht angegeben ist, wird der entsprechende Schritt übersprungen.

(7)  SELECT
(8)  DISTINCT <select_list>
(1)  FROM <left_table>
(3)  <join_type> JOIN <right_table>
(2)  ON <join_condition>
(4)  WHERE <where_condition>
(5)  GROUP BY <group_by_list>
(6)  HAVING <having_condition>
(9)  ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
Nach dem Login kopieren

Lassen Sie uns jede Phase der Abfrageverarbeitung im Detail analysieren

1 FORM: Berechnen Sie das kartesische Produkt der Tabelle links und der Tabelle rechts von FROM . Generieren Sie die virtuelle Tabelle VT1

2, ON: Führen Sie eine ON-Filterung für die virtuelle Tabelle VT1 durch und nur die Zeilen, die die erfüllen, werden in der virtuellen Tabelle VT2 aufgezeichnet.

3. JOIN: Wenn OUTER JOIN (z. B. Left Join, Right Join) angegeben ist, werden die nicht übereinstimmenden Zeilen in der beibehaltenen Tabelle als externe Zeilen hinzugefügt Generieren Sie die virtuelle Tabelle VT3. Wenn die Rug-From-Klausel mehr als zwei Tabellen enthält, werden die Schritte 1 bis 3 für das von der vorherigen Join-Verbindung generierte Ergebnis VT3 und die nächste Tabelle wiederholt, bis alle in der Tabelle verarbeitet sind.

4. WHERE: WHERE-Bedingungsfilterung für die virtuelle Tabelle VT3 durchführen. Nur Datensätze, die die erfüllen, werden in die virtuelle Tabelle VT4 eingefügt.

5. GROUP BY: Gruppieren Sie die Datensätze in VT4 entsprechend den Spalten in der Group by-Klausel, um VT5 zu generieren.

6 🎜>: Cube- oder Rollup-Vorgang für Tabelle VT5 ausführen, um Tabelle VT6 zu generieren.

7. HAVING: Have-Filter auf die virtuelle Tabelle VT6 anwenden, nur diejenigen, die die

8. SELECT: Führen Sie eine Auswahloperation aus, wählen Sie die angegebene Spalte aus und fügen Sie sie in die virtuelle Tabelle VT8 ein.

9. DISTINCT: Datensätze in VT8 deduplizieren. Generieren Sie die virtuelle Tabelle VT9.

10. Sortieren Sie die Datensätze in der virtuellen Tabelle VT9 nach , um die virtuelle Tabelle VT10 zu generieren.

11. LIMIT

: Nehmen Sie die Datensätze der angegebenen Zeile heraus, generieren Sie die virtuelle Tabelle VT11 und geben Sie das Ergebnis zurück. Verwandte Empfehlungen:

Was sind die Unterschiede zwischen utf8 und utf8mb4 in MySQL?

So ändern Sie die Längenbeschränkung der Funktion „group_conca“ in MySQL

Verwendung von count() in einer großen MySQL-Tabelle und Optimierung von count() in MySQL

Das obige ist der detaillierte Inhalt vonAnalyse der Reihenfolge der Anweisungsausführung in MySQL und der Abfrageverarbeitungsphase. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage