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の基礎知識学習ノート

推薦する

MySQL自動シャットダウン問題への対処の実践記録

最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...

Javascript 非同期プログラミング: Promise を本当に理解していますか?

目次序文基本的な使い方文法エラー処理プロミスチェーン呼び出し非同期と待機よく使われる方法1. Pro...

CSSでカスタムフォント(font-face)を導入する方法の詳細な説明

なぜこれを使ったのか?それはポスターを作ることから始まりました。それは嵐の夜でした。 。 。さて、無...

Nginx における 2 つの現在の制限方法についての簡単な説明

負荷は通常、システム設計時に予測されます。システムがパブリック ネットワークに公開されている場合、悪...

Vueタイムラインコンポーネントの使い方

この記事の例では、参考までにvueタイムラインコンポーネントの具体的な実装コードを共有しています。具...

MySQL データベース内の数十億のデータを素早くクリーンアップする方法

今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次...

yum インストールエラーの問題を解決する 保護されたマルチライブラリバージョン

現在、クラウドサーバーに nginx をインストールする際、最初に zlib などの依存ライブラリを...

Ubuntu環境でのSSHの詳細なインストールと使用

SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは...

スパンの最小高さを定義するソリューションは効果がありません

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

Nginx 構成 SSL および WSS 手順の紹介

目次序文1. Nginxのインストール1. Nginxをダウンロードする2. 依存関係をインストール...

Js クラスの構築と継承のケースの詳細な説明

JS のクラスの定義や継承は本当に多様なので、別のノートブックを開いて記録しておきます。意味オブジェ...

MySQLテーブルの内容の変更を監視し、MySQL binlogを有効にする

序文binlog は、MySQL のすべての追加、削除、および変更ステートメントを記録するバイナリ ...

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...

JavaScript の setTimeout と setTimeinterval の使用例の説明

どちらの方法も、一定時間後に JavaScript コードを実行するために使用できますが、それぞれに...