MySQL の一時テーブルと派生テーブルについての簡単な説明

MySQL の一時テーブルと派生テーブルについての簡単な説明

派生テーブルについて

メイン クエリに派生テーブルが含まれている場合、または SELECT ステートメントに UNION 句が含まれている場合、または SELECT ステートメントにフィールドの ORDER BY 句 (別のフィールドの GROUP BY 句) が含まれている場合、クエリを完了するために、MySQL は一時的な結果セットを格納するための一時テーブルを自動的に作成する必要があります。この一時テーブルは MySQL 自体によって作成および管理され、自動的に作成された一時テーブルと呼ばれます。自動的に作成された一時テーブルの場合、メモリ一時テーブルのパフォーマンスの方が優れているため、MySQL は常にメモリ一時テーブルを最初に使用します。メモリ一時テーブルが大きくなりすぎて一定のしきい値に達すると、メモリ一時テーブルは外部メモリ一時テーブルに変換されます。つまり、外部メモリ一時テーブルは、ストレージスペースの観点からメモリ一時テーブルの拡張です。メモリ内の一時テーブルを外部メモリ内の一時テーブルに変換するためのしきい値は、システム変数 max_heap_table_size と tmp_table_size の小さい方の値によって決まります。

派生テーブルは通常、from 句で使用されます。のように:

select * from (select * from table) as t;

一時テーブルについて

非常に大きなテーブルで作業する場合、大量のデータの小さなサブセットを取得するために、多数のクエリを実行する必要がある場合があります。テーブル全体に対してこれらのクエリを実行するのではなく、MySQL で一度にいくつかの必要なレコードを検索し、そのレコードを一時テーブルに選択して、それらのテーブルに対してクエリを実行する方が高速な場合があります。

一時テーブルの作成は簡単です。通常の CREATE TABLE ステートメントに TEMPORARY キーワードを追加するだけです。

一時テーブル tmp_table を作成します (

名前 VARCHAR(10) NOT NULL,

値 INTEGER NOT NULL

)

一時テーブルは、MySQL への接続期間中存在します。切断すると、MySQL は自動的にテーブルを削除し、使用されていたスペースを解放します。もちろん、接続したままテーブルを落としてスペースを空けることもできます。

DROP TABLE tmp_table

tmp_table という名前の一時テーブルを作成するときに、データベース内に tmp_table という名前のテーブルがすでに存在する場合、一時テーブルは必然的に非一時テーブル tmp_table をマスク (非表示) します。

一時テーブルを HEAP テーブルとして宣言する場合、MySQL では、メモリ内に作成するように指定することもできます。

一時テーブル tmp_table を作成します (

名前 VARCHAR(10) NOT NULL,

値 INTEGER NOT NULL

) タイプ = ヒープ

HEAP テーブルはメモリに格納されるため、HEAP テーブルに対して実行するクエリは、ディスク上の一時テーブルに対して実行するクエリよりも高速になる可能性があります。ただし、HEAP テーブルは一般的なテーブルとは多少異なり、独自の制限があります。詳細については、MySQL リファレンス マニュアルを参照してください。

前述のように、一時テーブルをテストして、大規模なデータベースに対してクエリを実行するよりも実際に高速かどうかを確認する必要があります。データが適切にインデックスされている場合、一時テーブルはまったく高速化されない可能性があります。

1. 一時テーブルが MySQL から切断されると、システムは一時テーブル内のデータを自動的に削除しますが、これは次のステートメントによって作成されたテーブルに限定されます。

フィールドを定義します。

一時テーブル tmp_table を作成します (

名前 VARCHAR(10) NOT NULL,

値 INTEGER NOT NULL

)

2) クエリ結果を一時テーブルに直接インポートする

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

2. さらに、MySQL ではメモリ内に直接一時テーブルを作成することもできます。メモリ内にあるため、速度が非常に速くなります。構文は次のとおりです。

一時テーブル tmp_table を作成します (

名前 VARCHAR(10) NOT NULL,

値 INTEGER NOT NULL

) タイプ = ヒープ

3. 上記の分析から、一時テーブルのデータがクリアされることがわかります。切断すると自動的にクリアされます。ただし、SQL ステートメントを発行するたびにプログラムがデータベースに接続することは不可能です (この場合、心配している問題が発生します。そうでない場合は問題はありません)。データベース接続が切断されたときにのみデータがクリアされるためです。データベース接続で複数の SQL ステートメントを発行した場合、システムは一時テーブル データを自動的にクリアしません。

以下もご興味があるかもしれません:
  • Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明
  • Mysql一時テーブルの原理と作成方法の分析
  • mysql 一時テーブルの使用状況の分析 [クエリ結果は一時テーブルに保存できます]
  • MySQL 5.7 の一時テーブルスペースを使用して落とし穴を回避する方法
  • MySQL FAQ シリーズ: 一時テーブルを使用する場合
  • JDBC および MySQL 一時テーブルスペースの詳細な分析
  • MySQL 一時テーブルの簡単な使用法
  • MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い
  • MySQL の 2 種類の一時テーブルの使用方法の詳細な説明
  • MySQL の一時テーブルの基本作成と使用のチュートリアル
  • MySQL の一時テーブルの基本的な使用方法
  • 一時テーブルを使用して MySQL クエリを高速化する方法
  • MySQL での一時テーブルの使用例

<<:  Nodeはリクエスト追跡にasync_hooksモジュールを使用します

>>:  MySQLの基礎知識学習ノート

推薦する

ウェブページ(ウェブサイト)のデザインと制作に関する考えや経験の共有

まずは投稿する前に! 「I Want to Study on My Own!」に改めて感謝します。た...

jQueryアニメーションを理解するのに役立つ記事

目次1. 要素の表示と非表示を制御する show() hide() 2. 要素の透明度を制御する f...

Vueは動的クエリルール生成コンポーネントを実装します

1. 動的クエリルール動的クエリルールは、おおよそ次の図のようになります。ユーザのカスタマイズに応じ...

Vue 関数のアンチシェイクとスロットリングの正しい使用方法

序文1. デバウンス: 高頻度イベントがトリガーされた後、関数は n 秒以内に 1 回だけ実行されま...

js の関数の長さはどれくらいですか?

目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...

VUEはFlappy Birdゲームのサンプルコードを実装します

Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...

JS デコレータ パターンと TypeScript デコレータ

目次デコレータパターンの紹介TypeScript のデコレータデコレータの使用デコレーターファクトリ...

Confluence と jira-software を Docker にデプロイする方法

バージョン: セントロス==7.2 jdk==1.8 合流==6.15.4 jira-ソフトウェア=...

HTTPS の有効化に関する経験の共有

国内のネットワーク環境が悪化し続ける中、さまざまな改ざんや乗っ取りが後を絶たず、サイト全体をHTTP...

Java+Tomcat 環境の展開とインストールのプロセス図

次に、Centos7 に Java+Tomcat をインストールします。インターネット上には多くの記...

HTML 名 ID とクラスの違い_PowerNode Java アカデミー

名前タグの名前を指定します。形式 <input type="text" n...

Dockerのyumソースの設定とCentOS7へのインストールの詳細な説明

ここではCentOS7が使用されており、カーネルバージョンは [root@localhost ~]#...

IE6 および IE7 で DIV コンテナの固定高さを使用するためのヒント

IE6 と IE7 では CSS の解釈に多くの違いがあります。今日はそのうちの 1 つである高さに...

JavaScript 配列メソッド - 体系的な概要と詳細な説明

目次一般的な配列メソッド配列要素の追加と削除配列ヘッダーの操作配列の末尾を操作する任意の場所に追加ま...

Docker で MySQL クラスターを構築する方法の例

Docker の基本的な手順:アップデートパッケージ yum -y アップデートDocker仮想マシ...