mysqlにおけるステートメントの実行順序とクエリ処理段階の分析

不言
リリース: 2018-08-22 10:07:09
オリジナル
1565 人が閲覧しました

この記事の内容は、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 フィルタリングを実行し、 を満たす行のみが仮想テーブル VT2 に記録されます。

3. JOIN: OUTER JOIN (左結合、右結合など) が指定されている場合、保持テーブル内の一致しない行が外部行として仮想テーブル VT2 に追加され、仮想テーブル VT3 が生成されます。 sub- 文に 3 つ以上のテーブルが含まれている場合、すべてのテーブルが処理されるまで、前の結合接続によって生成された結果 VT3 と次のテーブルに対してステップ 1 ~ 3 が繰り返されます。

4. WHERE: 仮想テーブル VT3 に対して WHERE 条件フィルタリングを実行します。 を満たすレコードのみが仮想テーブル VT4 に挿入されます。

5. GROUP BY: group by 句の列に従って VT4 のレコードをグループ化して、VT5 を生成します。

6. テーブル VT5 に対してキューブまたはロールアップ操作を実行して、テーブル VT6 を生成します。

7、HAVING: 仮想テーブル VT6 に HAVING フィルターを適用します。 を満たすレコードのみが仮想テーブル VT7 に挿入されます。

8. SELECT: 選択操作を実行し、指定された列を選択して、仮想テーブル VT8 に挿入します。

9. DISTINCT: VT8 でレコードの重複を除去します。仮想テーブル VT9.

10 の生成、ORDER BY: に従って仮想テーブル VT9 内のレコードをソートし、仮想テーブル VT10.

11、LIMIT: 指定された行のレコードを取り出し、仮想テーブル VT11 を生成し、結果を返します。

関連する推奨事項:

mysql の utf8 と utf8mb4 の違いは何ですか?

mysqlのgroup_conca関数の長さ制限を変更する方法

mysqlの大きなテーブルでのcount()の使用法とmysqlでのcount()の最適化

以上がmysqlにおけるステートメントの実行順序とクエリ処理段階の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!