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 プロジェクト プロセス図

推薦する

vue.js ルーターのネストされたルートの実例

目次序文Vue CLI での設定基本コードVueルーターの登場ネストされたルートの設定要約する序文V...

MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)

1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...

MySQL最新バージョン8.0.17解凍版インストールチュートリアル

個人的にはインストール版よりも解凍版の方がインストールしやすいと思います。早速、解凍版のインストール...

Vue コンポーネント値転送中のデータ損失の分析と解決

序文前回の記事では、JavaScript の 2 つのデータ型、基本型と参照型、および参照型の浅いコ...

JS初心者が配列を処理するための実践的な方法のまとめ

join() メソッド: 指定された区切り文字を使用して配列内のすべての要素を文字列に接続します。例...

純粋なテキストとアイコン付きのボタンを実現するための HTML+CSS

この記事では、いくつかの基本的なページ要素の実装方法をまとめており、後で更新される予定です。まず、私...

JavaScript 配列の Reduce() メソッドの構文と例の分析

序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...

ユーザー中心設計

最近、デジタル デザイン コミュニティで「誰が何を担当するのか」という明らかな混乱についてよく質問さ...

コンテンツの位置をランダムにドラッグするHTMLを実装する2つの方法

テスト: Chrome v80.0.3987.122 は正常です方法は2つあります。通常のラベルの位...

MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

1. インデックスを作成する理由(メリット)インデックスを作成するとシステムのパフォーマンスが大幅に...

js は、州、市、地区の 3 段階の選択カスケードを実装します。

この記事では、省、市、地区の3段階選択を実現するためのjsの具体的なコードを紹介します。具体的な内容...

<td></td> タグの境界線スタイルがブラウザに表示されない問題の解決方法

質問: 360ブラウザの互換モードなど、一部のブラウザでは、 <td style="...

ブリージングカルーセルを実装するネイティブJS

今日は、ネイティブ JS で実装されたブリージング カルーセルを紹介します。効果は次のとおりです。 ...

MySQL データ ウェアハウスを保護するための 5 つのヒント

さまざまなソースからデータを集約することで、中央倉庫を作成できます。データ ウェアハウスは、ビジネス...

同期スクロールを実現するための複数のテーブル要素のサンプルコード

Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...