MySQL メモリテーブルと一時テーブルの使用方法の詳細な説明

MySQL メモリテーブルと一時テーブルの使用方法の詳細な説明

MySQL メモリ テーブルと一時テーブルの使用

メモリテーブル:

セッション 1
$ mysql -uroot
root@(なし) 10:05:06>テストを使用する
データベースが変更されました
root@test 10:06:06>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
root@test 10:08:46>tmp_memory値に挿入(1);
クエリは正常、1 行が影響を受けました (0.00 秒)
ルート@テスト 10:08:46>
セッション2
$ mysql -uroot テスト
root@test 10:05:12>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;
エラー 1050 (42S01): テーブル 'tmp_memory' は既に存在します
root@test 10:16:27>tmp_memory から * を選択します。
+------+
| 私 |
+------+
| 1 |
+------+
セット内の 1 行 (0.00 秒)

1. 複数のセッションで同じ名前のテーブルを作成することはできません

2. セッションが作成されると、他のセッションからも見えるようになります。

3. データディレクトリには tmp_memory.frm のみがあり、テーブル構造はディスク上に保存され、データはメモリに保存されます。

4. MySQLを再起動またはシャットダウンすると、メモリテーブル内のデータは失われますが、テーブル構造はそのまま残ります。

5. インデックスの作成、削除、一意のインデックスのサポートが可能

6. マスター データベースとスレーブ データベースには影響しません。マスター データベースに挿入されたデータは、スレーブ データベースにも表示されます。

7. テーブルを表示する

一時テーブル:

セッション1
$ mysql -uroot テスト
root@test 10:30:18>一時テーブル tmp_table を作成します (名前 VARCHAR(10) NOT NULL、値 INTEGER NOT NULL);
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
root@test 10:31:54>tmp_tableから*を選択します。
+--------+-------+
| 名前 | 値 |
+--------+-------+
| ああああ | 10 |
+--------+-------+
セット内の 1 行 (0.00 秒)
セッション2
root@test 10:20:13> 一時テーブル tmp_table を作成します (名前 VARCHAR(10) NOT NULL、値 INTEGER NOT NULL);
クエリは正常、影響を受けた行は 0 行 (0.02 秒)
root@test 10:30:39>tmp_tableに値を挿入します('bbbbbbbb'、10)。
クエリは正常、1 行が影響を受けました (0.01 秒)
root@test 10:31:33>tmp_tableから*を選択します。
+---------+-------+
| 名前 | 値 |
+---------+-------+
| bbbbbbbb | 10 |
+---------+-------+
セット内の 1 行 (0.00 秒)
root@test 10:31:43>終了
さよなら
[1 シングル:MS-Master db152011.sqa.cm6:mysql ~ ]
$ mysql -uroot テスト
root@test 10:32:17>tmp_tableから*を選択します。
エラー 1146 (42S02): テーブル 'test.tmp_table' が存在しません
ルート@テスト 10:32:22>
ルート@テスト 10:32:23>

1. 作成されたテーブルの名前は同じでも構いません

2. テーブル構造とデータはメモリに保存されます

3. セッションが消えると、テーブル構造とデータは消える

4. インデックスを作成したり削除したりできます

5. メイン データベースによって作成されたテーブルがスタンバイ データベースに見つかりません。

6. テーブルを表示してもテーブルが表示されない

メモリテーブルを使用する際の注意点

1. メモリテーブルはデータを削除したり、テーブル自体をドロップしたりする必要があるため、ドロップ権限が必要となり、より危険です。

2. メモリ テーブルのテーブル構造はディスクに保存されます。複数のセッションで同じテーブル名を使用すると、競合が発生します。テーブル名を使用する必要がなく、使用するたびにテーブル構造を作成する必要がある場合、小さなファイルが多数存在し、DB のメンテナンスに役立たず、DBA がテーブルをクリーンアップするときにリスクがあります。

上記を踏まえると、メモリテーブルの使用は適切ではない。

1. 一時テーブルはセッションレベルです。複数のセッションで同じ名前のテーブルを作成しても、相互に影響はありません。

2. セッションが消えてすべてが消えてしまうため、アプリケーションのトラブルシューティングに役立たない

さらに、これら両方には追加のメモリ領域が必要ですが、これは DB 側では許容できるものの、あまり制御できません。DB 側には次のパラメータもあります。

max_tmp_tables クライアントが同時に開いたままにできる一時テーブルの最大数。デフォルト値は 32 ですが、必要に応じてこの値を調整できます。

mysqlは一時テーブルを作成し、クエリ結果を既存のテーブルに挿入します。

今日、非常に難しい問題に遭遇しました。データを一時的に保存して、後で読み込みたいと考えていました。データベース理論の授業で先生が一時テーブルが作れると言っていたような記憶があるのですが、MySQLにはそんな機能があるのでしょうか?一時テーブルはメモリ内にあり、ビューよりも高速に読み取られます。次に、クエリ結果を一時テーブルに保存する必要もあります。

以下は、一時テーブルを作成し、参照用にデータを挿入する例です。

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

1) フィールドを定義する

一時テーブル tmp_table を作成します (
 名前 VARCHAR(10) NOT NULL, 
 時刻 日付 NOT NULL
 )

さらに進んだ点は次のとおりです。

一時テーブル `temptable` を作成します (
 `jws` varchar(100) 文字セット utf8 照合 utf8_bin NOT NULL,
 `tzlb` varchar(100) 文字セット utf8 照合 utf8_bin NOT NULL,
 `uptime` 日付が NULL ではない
)ENGINE=InnoDB デフォルト文字セット=latin1″

エンコード方式も指定されています。 。ハハハ、文字化けを防ぐためです。

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

一時テーブル tmp_table を作成します。SELECT * FROM table_name

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

 一時テーブル tmp_table を作成します (
 名前 VARCHAR(10) NOT NULL,
 値 INTEGER NOT NULL
 ) タイプ = ヒープ

では、クエリ結果を既存のテーブルにどのように保存するのでしょうか?

1. A の 2 番目の方法を使用できます。

2. insert into temtable (select a,b,c,d from tablea)”;

MySQL データベース メモリ一時テーブル パラメータ

1. 内部メモリ一時テーブルの最大サイズ

この変数は、ユーザーが作成した MEMORY テーブルには適用されません。より複雑なクエリでは一時テーブルが作成されます。実際の制限は、tmp_table_size と max_heap_table_size の小さい方によって決まります。
tmp-table-size パラメータデフォルト 16777216

1.1. メモリ一時テーブルとハードディスク一時テーブル メモリ内の一時テーブルが制限を超えると、MySQL はそれを自動的にディスク上の一時テーブルに変換します。
MySQL 5.7.5 以降では、internal_tmp_disk_storage_engine オプションは、ディスク一時テーブルに使用するストレージ エンジンを定義します。
MySQL 5.7.5 より前では、MyISAM ストレージ エンジンが使用されていました。
作成された一時メモリテーブルの数: Created_tmp_tables
作成された一時ハードディスクテーブルの数: Created_tmp_disk_tables
追加: Created_tmp_files

1.2. 設定の参考 tmp-table-size を設定する場合は、ハードディスク一時テーブルとメモリ一時テーブルの値を参考にしてください。
一般的な比率は次のとおりです: Created_tmp_disk_tables/Created_tmp_tables<5%
高度な GROUP BY クエリを多数実行し、メモリが十分にある場合は、tmp_table_size (および必要に応じて max_heap_table_size) の値を増やします。

2. MEMORYテーブルの最大サイズ

この変数は、ユーザーが作成した MEMORY テーブルの最大サイズを設定します。この変数値は、MEMORY テーブルの MAX_ROWS 値を計算するために使用されます。
max_heap_table_size パラメータのデフォルト 16777216

2.1. 使用法 この変数を設定しても、CREATE TABLE などのステートメントを使用してテーブルが再作成されるか、ALTER TABLE または TRUNCATE TABLE を使用して変更されない限り、既存の MEMORY テーブルには影響しません。
サーバーの再起動により、既存の MEMORY テーブルの最大サイズもグローバル max_heap_table_size 値に設定されます。
この変数は、内部メモリ テーブルのサイズを制限するために tmp_table_size と一緒に使用されます。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL InnoDB ストレージエンジンのメモリ管理の詳細な説明
  • MySQL 8.0 のメモリ消費の詳細な分析
  • MySQL OOM (メモリオーバーフロー) の解決策
  • MySQLのメモリ使用量を表示する方法の詳細な説明
  • MySQLの一般的なメモリ不足による起動失敗に対する完璧な解決策
  • MySQL のメモリ使用量と CPU 使用率が高い場合のテストと解決策
  • MySQL 5.6 の起動時にメモリ使用量が高くなる問題の解決方法
  • MySQL本番データベースの異常なメモリ増加のトラブルシューティングのプロセスを共有する

<<:  HTML テーブル マークアップ チュートリアル (16): タイトルの水平方向の配置属性 ALIGN

>>:  Tomcat 初回展開 Web プロジェクト プロセス図

推薦する

Centos7 で mysqldump を使用して MySQL データベースの毎日の自動バックアップを作成する

1. 要件:データベースのバックアップは、実稼働環境にとって特に重要です。データベースのバックアップ...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

k8sとDockerの関係についての簡単な説明

最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...

Web デザイナーにはどのような知識体系が必要ですか?

製品設計者は、複雑で大規模な製造システムと多様な市場に直面しているため、知識体系には幅広さと深さの両...

ワンクリックで雨や雪のエフェクトを実現する ThingJS パーティクルエフェクト

目次1. パーティクルエフェクト2. シーンを読み込む3. さまざまな粒子効果の実現エンディング: ...

要素 el-table テーブルの二次カプセル化 (テーブルの高さの調整付き)

序文会社でのインターンシップ中、フロントエンド開発にはvue+element-uiフレームワークを使...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...

重要なmysqlログファイルの概要

著者: 丁易出典: https://chengxuzhixin.com/blog/post/mysq...

Alibaba CloudがCloud Shieldから無料のSSL証明書(https)を申請

プロジェクトでは https サービスを使用する必要があるため、Alibaba Cloud では無料...

MySQLデータベースの圧縮バージョンのインストールと設定に関する詳細なチュートリアル

目次1. MySQLをダウンロードする2. 圧縮パッケージを解凍する3. MySQLを初期化する4....

Vue でユーザー権限に基づいてルートを動的に追加する方法

ユーザーの権限に応じて異なるメニュー ページを表示します。知識ポイントルートガード(事前ガードを使用...

Node.js での SerialPort モジュールの使用

目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...

Ubuntu の MySQL のパラメータ ファイル my.cnf の詳細な分析

序文MySQL に関する私の理解に基づくと、パフォーマンスの最適化作業やマスター スレーブ レプリケ...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...