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

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

不言
不言Original
2018-08-22 10:07:091524Durchsuche

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>

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 82c0651ea54f2d707c0085c6455816d7 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 caf4807ca0f515c2fe791dfab2fb1a7d 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 13c62fe1f64809be530a67686b81ea96, 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!

Stellungnahme:
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