MySQL FAQ シリーズ: 一時テーブルを使用する場合

MySQL FAQ シリーズ: 一時テーブルを使用する場合

一時テーブルの概要

一時テーブルとは: MySQL は中間結果セットを保存するために使用されます。一時テーブルは現在の接続でのみ表示されます。接続が閉じられると、Mysql は自動的にテーブルを削除し、すべてのスペースを解放します。一時テーブルが生成される理由: 一般的に、複雑なSQLでは多数の一時テーブルが作成されます。

一時テーブルには、メモリ一時テーブルとディスク一時テーブルの 2 種類があります。メモリ一時テーブルはメモリ ストレージ エンジンを使用し、ディスク一時テーブルは myisam ストレージ エンジンを使用します (ディスク一時テーブルは innodb ストレージ エンジンも使用できます。internal_tmp_disk_storage_engine パラメータは、使用するストレージ エンジンを制御します。MySQL 5.7.6 以降ではデフォルトは innodb ストレージ エンジンであり、それ以前のバージョンではデフォルトは myisam ストレージ エンジンです)。 Created_tmp_disk_tables および Created_tmp_tables パラメータを使用して、生成されるディスク一時テーブルの数と、生成されるすべての一時テーブル (メモリとディスク) を表示します。

MySQL は次の状況で一時テーブルを作成します。

1. UNIONクエリ

2. UNION クエリで TEMPTABLE アルゴリズムまたはビューを使用します。

3. ORDER BY 句と GROUP BY 句が異なる場合。

4. テーブル結合では、ORDER BY 列が駆動テーブルにありません。

5. DISTINCT クエリを実行し、ORDER BY を追加します。

6. SQL で SQL_SMALL_RESULT オプションが使用されている場合。

7. FROM 内のサブクエリ

8. サブクエリまたはセミ結合中に作成されたテーブル。

EXPLAIN 実行プラン結果の Extra 列を確認します。Using Temporary が含まれている場合は、一時テーブルが使用されることを意味します。

もちろん、一時テーブルに格納する必要があるデータの量が上限 (tmp-table-size または max-heap-table-size のいずれか大きい方) を超える場合は、ディスクベースの一時テーブルを生成する必要があります。

ディスク一時テーブルは、次の状況で作成されます。

1. データ テーブルには BLOB/TEXT 列が含まれています。

2. GROUP BY または DSTINCT 列に、512 文字を超える文字型の列 (または 512 バイトを超えるバイナリ型の列。5.6.15 より前は、512 バイトを超えているかどうかのみが考慮されます) があります。

3. SELECT、UNION、および UNION ALL クエリには、最大長が 512 を超える列があります (文字列型の場合は 512 文字、バイナリ型の場合は 512 バイト)。

4. SHOW COLUMNS/FIELDS や DESCRIBE などの SQL コマンドを実行します。これらのコマンドの実行結果には BLOB 列型が使用されるためです。

5.7.5 以降では、ディスク一時テーブルのエンジン タイプを InnoDB として定義するための新しいシステム オプション internal_tmp_disk_storage_engine が追加されました。これより前は、MyISAM のみが使用できました。 5.6.3 以降に追加された新しいシステム オプション default_tmp_storage_engine は、CREATE TEMPORARY TABLE によって作成される一時テーブルのエンジン タイプを制御します。以前のデフォルトは MEMORY でした。これら 2 つを混同しないでください。

次の例を参照してください

mysql> default_tmp_storage_engine を "InnoDB" に設定します。
-rw-rw---- 1 mysql mysql 8558 Jul 7 15:22 #sql4b0e_10_0.frm -- InnoDB エンジンの一時テーブル -rw-rw---- 1 mysql mysql 98304 Jul 7 15:22 #sql4b0e_10_0.ibd
-rw-rw---- 1 mysql mysql 8558 7月7日 15:25 #sql4b0e_10_2.frm

mysql> default_tmp_storage_engine = "MyISAM" を設定します。
-rw-rw---- 1 mysql mysql 0 Jul 7 15:25 #sql4b0e_10_2.MYD -- MyISAM エンジンの一時テーブル -rw-rw---- 1 mysql mysql 1024 Jul 7 15:25 #sql4b0e_10_2.MYI

mysql> default_tmp_storage_engine = "MEMORY" を設定します。
-rw-rw---- 1 mysql mysql 8558 Jul 7 15:26 #sql4b0e_10_3.frm -- MEMORYエンジンの一時テーブル

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

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

<<:  Linux でファイルをあいまい検索するのに適したコマンドは何ですか?

>>:  React Nativeはモニタリングジェスチャーの上下プル効果を実現します

推薦する

時系列転位修復ケースを実装するSQL

目次1. 要件の説明2. アイデアの概要1. 延長を要求する2. アイデアの概要3. SQLコード1...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

mysql8.0 Windows x64 zip パッケージのインストールと構成のチュートリアル

MySQL 8 Windows版 zipインストール手順(ダウンロードアドレス) 1. ZIPファイ...

Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

序文プロジェクト要件: Dockeridea に Docker プラグインをインストールし、Dock...

Rancher で Kubernetes 用の標準化された VMware イメージを構築する方法

Kubernetes を学習するときは、Kubernetes 環境で練習する必要があります。ただし、...

Zabbix で Windows のパフォーマンスを監視する方法

背景情報最近、Windows パフォーマンスに関する本を読み直しています。以前は SCOM 監視を使...

IE6/IE7/IE8/IE9/FF 向け CSS ハック (概要)

IE8.0の正式版をインストールしたので、基本的なCSS HACKをいくつかまとめてみました。We...

テキストエリアの disabled 属性と readonly 属性の具体的な使用法

障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...

Baotaパネルを再起動すると、「-ModuleNotFoundError: No module named 'geventwebsocket'」というメッセージが表示されます。

背景:サーバーがFlaskプロジェクトをデプロイし、python3をインストールしたため、再起動時に...

uniappのグローバル変数実装の詳細な説明

序文この記事では、uniapp グローバル変数の実装方法をいくつかまとめています。詳細な知識は、uV...

jQueryはすべてのショッピングカート機能を実装します

目次1. すべて選択2. 商品の数量を増やすか減らす3. 商品の小計を変更する4. 合計と合計額を計...

Ubuntu16.04はphp5.6ウェブサーバー環境を構築します

Ubuntu 16.04 はデフォルトで PHP7.0 環境をインストールしますが、PHP7 は一部...

Dockerコンテナのネットワークポート設定プロセスの詳細な説明

ネットワークポートの公開実際、Docker にはネットワーク ポートの公開に関わる 2 つのパラメー...

Docker で Maven プロジェクトをより速くビルドする

目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....

HTML チュートリアル: 画像のサイズ、配置、間隔、境界線の属性を変更する方法

画像タグ: <img> ページに画像を挿入するには、「src」属性を持つ「img」タグを...