SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析

まず、ステートメントが実行される順序を見てみましょう。

(8)選択する (9)Aを区別する (1)Taから (3)Tbに結合する 
(2) XXXについて (4) XXXの場合 (5) XXXでグループ化 (6) 
{立方体|ロールアップ} (7)XXXを持つ (10)XXXで順序付ける (11)XXXを制限する

次に、クエリ処理のさまざまな段階を見てみましょう。

  1. FROMはfrom句の左と右のテーブルに対してカルテシアンセットを実行し、仮想テーブルVT1を生成します。
  2. ONは仮想テーブルVT1でオンフィルタリングを実行し、結合条件を満たす行のみが仮想テーブルVT2に挿入されます。
  3. JOIN 外部結合が指定されている場合、保持されたテーブル内の一致しない行が仮想テーブル VT2 の外部行として追加され、仮想テーブル VT3 が生成されます。 from 句に 2 つ以上のテーブルが含まれている場合は、すべてのテーブルが処理されるまで、VT3 と、前の接続によって生成された結果テーブル内の次のテーブルに対して手順 1 ~ 3 を繰り返します。
  4. WHERE は仮想テーブル VT3 に対して where フィルターを実行し、条件を満たすものだけが仮想テーブル VT4 に挿入されます。
  5. GROUP BY は、group by 句の列に従って VT4 のレコードをグループ化し、VT5 を生成します。
  6. CUBE|ROLL UP テーブル VT5 に対して CUBE または ROLLUP 操作を実行して、テーブル VT6 を生成します。
  7. HAVINGは仮想テーブルVT6にHAVINGフィルタを適用し、条件を満たすレコードのみが仮想テーブルVT7に挿入されます。
  8. SELECT は 2 回目の選択操作を実行し、指定された列を選択して仮想テーブル VT8 に挿入します。
  9. DISTINCT は重複データを削除し、仮想テーブル VT9 を生成します。
  10. ORDER BY 指定された要件に従って仮想テーブルVT9のレコードをソートし、仮想テーブルVT10を生成します。
  11. LIMITは指定された行のレコードを取得し、仮想テーブルVT11を生成し、それをクエリユーザーに返します。

ご質問がありましたら、メッセージを残すか、コミュニティに参加して話し合いましょう。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • PHP を使用して複数のステートメントの mysqli バッチ実行を実装する方法の例
  • 非動的SQL Server SQLステートメントを使用して動的クエリを実行する
  • SQL SERVER で動的 SQL ステートメントを構築して実行する方法
  • Mybatis プラグイン: SQL の印刷とその実行時の実装方法
  • Mysql は、デッドロック問題を解決するために kill コマンドを使用します (実行中の特定の SQL ステートメントを強制終了します)。
  • MySQL サービス 1067 エラーの解決策: mysql 実行可能ファイルのパスを変更する
  • MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明
  • Oracle 実行が最も遅く、クエリ時間が最長の SQL 文を表示する

<<:  CocosCreator 学習モジュールスクリプト

>>:  CocosCreatorで複数のタイマーを使用する方法の詳細な説明

推薦する

Windows 10 で MySQL をダウンロードするための詳細なチュートリアル

MySQL のバージョンは、Enterprise Edition と Community Editi...

期間限定フラッシュセール機能を実現するJavaScriptタイマー

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...

MySQLデッドロックの原因と解決策

データベースは、オペレーティング システムと同様に、複数のユーザーが使用する共有リソースです。複数の...

TypeScript インターフェースの紹介

目次1. インターフェース定義2. 属性2.1 オプション属性2.2 読み取り専用プロパティ3. ク...

Ubuntu 18.04 で apt-get ソースを変更する方法

apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...

Vue+tsx のスロット使用の問題が置き換えられない

目次序文問題を見つける解決する追記序文最近、 UIコンポーネントを作成する予定で、 vue 2.xと...

WEBAPP開発スキルのまとめ(モバイルWebサイト開発の注意点)

1. レスポンシブな Web を開発するには、ページを画面サイズに適応させる必要があります。前の記...

MySQLの大文字と小文字の区別によって発生する問題の分析

MYSQLは大文字と小文字を区別します言葉を見れば信じられます。タイトルを見れば内容がわかります。 ...

InnoDBのインデックスページ構造、挿入バッファ、適応ハッシュインデックスについての簡単な説明

InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...

MySQLアカウントのパスワード変更方法(概要)

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

HTML のスクロールバーについて/スクロールバーの削除

1. xhtmlの下のスクロールバーの色元の HTML では、ページ全体のスクロール バーを次のよう...

HTML で水平ナビゲーション構造を設定する方法

この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...

HTML a タグの href 属性を使用して相対パスと絶対パスを指定する方法

実際のWeb開発では、画像の挿入やCSSファイルなどすべてパスが必要となります。ファイルパスを誤って...