この記事の内容は、MySQL でのステートメントの実行シーケンスとクエリ処理段階の分析に関するもので、必要な方は参考にしていただければ幸いです。
MySQL ステートメントは、以下の図でマークされているように、合計 11 のステップに分割されています。FROM 操作は常に最初に実行され、LIMIT 操作は最後に実行されます。各操作では、処理の入力として使用される仮想テーブルが生成されますが、これらの仮想テーブルはユーザーには透過的ですが、結果として返されるのは最後の仮想テーブルのみです。対応する操作がステートメントで指定されていない場合、対応するステップはスキップされます。
(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>
クエリ処理の各段階を詳しく分析してみましょう
1. FORM: FROM の左側のテーブルと右側のテーブルのデカルト積を計算します。 Generate virtual table VT1
2, ON: 仮想テーブル VT1 に対して ON フィルタリングを実行し、bf9b4c48950c937d4fa97667a2821c6b を満たす行のみが仮想テーブル VT2 に記録されます。
3. JOIN: OUTER JOIN (左結合、右結合など) が指定されている場合、保持テーブル内の一致しない行が外部行として仮想テーブル VT2 に追加され、仮想テーブル VT3 が生成されます。 sub- 文に 3 つ以上のテーブルが含まれている場合、すべてのテーブルが処理されるまで、前の結合接続によって生成された結果 VT3 と次のテーブルに対してステップ 1 ~ 3 が繰り返されます。
4. WHERE: 仮想テーブル VT3 に対して WHERE 条件フィルタリングを実行します。 37023308e307efd5f0e857faeb928224 を満たすレコードのみが仮想テーブル VT4 に挿入されます。
5. GROUP BY: group by 句の列に従って VT4 のレコードをグループ化して、VT5 を生成します。
6. テーブル VT5 に対してキューブまたはロールアップ操作を実行して、テーブル VT6 を生成します。
7、HAVING: 仮想テーブル VT6 に HAVING フィルターを適用します。
8. SELECT: 選択操作を実行し、指定された列を選択して、仮想テーブル VT8 に挿入します。
9. DISTINCT: VT8 でレコードの重複を除去します。仮想テーブル VT9.
10 の生成、ORDER BY: 660e01dadb9fb9cdda303aa6c4f5bf4f に従って仮想テーブル VT9 内のレコードをソートし、仮想テーブル VT10.
11、LIMIT: 指定された行のレコードを取り出し、仮想テーブル VT11 を生成し、結果を返します。
関連する推奨事項:mysql の utf8 と utf8mb4 の違いは何ですか?
mysqlのgroup_conca関数の長さ制限を変更する方法
mysqlの大きなテーブルでのcount()の使用法とmysqlでのcount()の最適化以上がmysqlにおけるステートメントの実行順序とクエリ処理段階の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。