MySQLが内部一時テーブルを使用するタイミングについて簡単に説明します。

MySQLが内部一時テーブルを使用するタイミングについて簡単に説明します。

組合執行

分析を簡単にするために、次のSQLを例として使用します。

テーブル t1 を作成します ( id INT 主キー、 a INT、 b INT、 INDEX ( a ) );

デリミタ;;
CREATE PROCEDURE idata ( ) BEGIN
宣言する
        私はINT;
 i = 1 に設定します。
 その間
   ( i <= 1000 ) する
   t1に挿入
  価値観
   ( 私、 私、 私 );
  i = i + 1 を設定します。
 終了しながら;
 終わり;;

区切り文字 ;
idata() を呼び出す。

次に次のSQLを実行します

(select 1000 as f) 結合 (select id from t1 order by id desc limit 2);

この SQL ステートメントのセマンティクスは、2 つのサブクエリの結合を取り、重複を削除することです。

ご覧のとおり、2 行目のキーはプライマリです。つまり、2 番目のサブクエリはインデックス ID を使用します。 3 行目の Extra フィールドは、ユニオン サブクエリを実行するときに一時テーブルが使用されることを示します。
このステートメントの実行フローは次のとおりです。
1) 主キーフィールドである整数フィールド f を 1 つだけ持つ一時メモリ テーブルを作成します。
2) 最初のサブクエリを実行し、1000を一時テーブルに格納します。
3) 2 番目のサブクエリを実行し、最初の行 id=1000 を取得して、一時テーブルに挿入しようとします。ただし、値 1000 は一時テーブルに既に存在するため、一意制約に違反し、挿入は失敗します。次に、2 番目の行 999 を取得し、一時テーブルに正常に挿入します。
4) 一時テーブルから行ごとにデータを取得し、結果を返して、一時テーブルを削除します。結果には 1000 と 999 の 2 つのデータが含まれます。
ご覧のとおり、一時テーブルはデータを一時的に保存する役割を果たし、ユニオン重複排除のセマンティクスを実現する一意制約があります。

グループ化

一時テーブルを使用するもう1つの一般的な例は、group byです。次のSQLを見てみましょう。

t1 から id%10 を m として選択し、count(*) を c としてグループ化し、m でグループ化します。

このステートメントは、テーブル t1 内のデータを id%10 でグループ化し、出力する前に m の結果で並べ替えます。

「追加」フィールドには、次の 3 つの情報が表示されます。

1) インデックスの使用。このステートメントはカバー インデックスを使用し、インデックス a を選択することを示します。
2) 一時テーブルが使用されていることを示す、temporary の使用。
3) filesort を使用するにはソートが必要です。

このステートメントの実行フローは次のとおりです。

1) フィールド m と c を持つ一時メモリ テーブルを作成します。主キーは m です。
2) テーブルt1のインデックスaをスキャンし、リーフノードのid値を1つずつ取り出し、id%10の結果を計算し、それをxとして記録します。

  • 一時テーブルに主キー x がない場合、レコード (x,1) を挿入します。
  • テーブルに主キー x を持つ行がある場合は、主キー x を持つ行の c 値に 1 を加算します。

3) トラバーサルが完了したら、フィールドmに従ってソートして結果を取得します。

メモリ内の一時テーブルのサイズには制限があります。パラメータ tmp_table_size はこのメモリ サイズを制御します。デフォルトは 16M です。メモリ内の一時テーブルが上限に達すると、メモリ内の一時テーブルはディスク上の一時テーブルに変換されます。ディスク上の一時テーブルのデフォルト エンジンは InnoDB です。テーブルに大量のデータがある場合、クエリは大量のディスク領域を占有する可能性があります。

MySQL が内部一時テーブルを使用する場合についての説明はこれで終わりです。MySQL 内部一時テーブルの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL でよく使用されるデータベースとテーブル シャーディング ソリューションの概要
  • MySQLパーティションテーブルは月別に分類されています
  • MySQLはデータテーブル内の既存のテーブルを分割します
  • MySQL テーブル分割後にスムーズにオンラインになる方法
  • MySQLシリーズ マルチテーブル結合クエリ92および99構文例詳細チュートリアル
  • MySQL内部一時テーブルの具体的な使用法
  • Python で MySQL テーブル情報を収集して集計する詳細な例
  • MYSQLテーブルの包括的な概要

<<:  Linux での Hbase のインストールと設定のチュートリアル

>>:  ろうそくを溶かす(水滴)サンプルコードを実現する純粋な CSS

推薦する

CSS3 弾性拡張ボックスの詳細な説明

使用フレキシブル ボックスはフロントエンドの Web ページ レイアウトで重要な役割を果たしますが、...

レスポンシブ Web デザインが価値のない 5 つの理由

この記事は Tom Ewer の Managewp ブログからのもので、現在人気のレスポンシブ デザ...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

JavaScript 配列 sort() メソッドの基本的な使い方と落とし穴

序文日常のコード開発では、配列のソートに関連する操作が多数あります。JavaScript では、so...

MySQL のユニークインデックスと通常のインデックスのどちらを選択すればよいでしょうか?

ユーザー テーブルを設計するときに、各人の ID 番号が一意であり、検索する必要があるシナリオを想像...

初心者向けMySQLシリーズチュートリアル

目次1. 基本概念と基本コマンド1) 基本的な概念2) 基本コマンド2. SQL文の記述順序と実行順...

html 内の絶対パス URL と相対パス URL、サブディレクトリ、親ディレクトリ、ルート ディレクトリ

絶対 URL は、インターネット上の特定のファイルに必要なすべてのコンテンツを表すために使用されます...

Sublime Text - ブラウザのショートカットキーを設定するための推奨方法

コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...

ページに間隔を空けてグリッドレイアウトを完璧に実装する方法

典型的なレイアウト例上の写真のように、正方形の真ん中に一定の隙間があり、その隙間は固定されています。...

WeChatアプレットでのwxsファイルの素晴らしい使い方をいくつか紹介します

目次序文応用フィルタードラッグファイル間での参照の受け渡しwxsはjsロジック層にパラメータを渡しま...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

jsはカスタムドロップダウンボックスを実装します

この記事の例では、カスタムドロップダウンボックスを実装するためのjsの具体的なコードを参考までに共有...

MySQL で特殊文字を含むデータベース名を作成する方法の例

序文この記事では、MySQL で特殊文字を使用してデータベース名を作成する方法について説明します。こ...

Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用

この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...

Vue3のdefineComponentの役割についての簡単な説明

目次defineComponent オーバーロード関数開発実務defineComponent 関数は...