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で複数のタイマーを使用する方法の詳細な説明

推薦する

MacOS に MySQL 8.0 をインストールして MySQL にログインする方法

公式チュートリアルに従って、インストール パッケージをダウンロードし、[インストール] をクリックし...

意外と知らないLinuxのSSHコマンドの使い方7選を徹底解説

システム管理者は複数のサーバーを同時に管理する場合があり、これらのサーバーは異なる場所に配置されてい...

CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明

1. 原因:サブボックスをフロートに設定した後の効果: 青いボックスをフロートに設定すると、標準のド...

Debian 9 システムに MySQL データベースをインストールする方法

序文タイトルを見ると、誰もが「Debian 9 に MySQL をインストールするにはどうすればいい...

MySQL 5.7.21 履歴データディレクトリからデータを復元するチュートリアルの解凍バージョン

状況の説明: データベースが異常に起動およびシャットダウンしたため、サービスを再度起動したときに「起...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

Linux で大容量メモリ ページを持つ Oracle データベースを最適化する方法

序文PC サーバーは今日まで発展を続け、パフォーマンスにおいて大きな進歩を遂げてきました。 64ビッ...

dockerfile における ENTRYPOINT と CMD の組み合わせと違い

前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...

Bootstrap 3.0 学習ノートのページレイアウト

今回はレイアウトを中心に学習しますが、これは基本的なHTMLタグのほとんどにも存在するため、比較的簡...

DockerコンテナのIPアドレスを表示する方法

私はずっとDockerにはIPアドレスがないと思っていました。実はDockerのネットワークテンプレ...

JavaScript が重複したネットワークリクエストを防ぐ方法の例

序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...

CSS で overflow-y: visible; が機能しない理由の分析と解決

シナリオ最近の要件は、モバイル デバイス用の h5 ページです。これには、選択可能なカードの行が必要...

Node.jsはexpress-fileuploadミドルウェアを使用してファイルをアップロードします

目次プロジェクトを初期化するサーバーの作成クライアントを初期化するコンポーネントの記述ファイルアップ...

Docker を使用した JMeter+Grafana+Influxdb 監視プラットフォームの構築に関する詳細なチュートリアル

Jmeter がネイティブの結果表示機能を提供していることは誰もが知っています。ネイティブの結果表示...

Linux コマンドラインでメールを送信する 5 つの方法 (推奨)

シェル スクリプトで電子メールを作成する必要がある場合は、コマンド ラインから電子メールを送信する知...