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 のスロットリング関数使用時の落とし穴ガイド

序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...

MySql 学習 3 日目: データ テーブル間の接続とクエリの詳細

主キー:キーワード: 主キー機能: null にすることはできず、一意である必要があります。主キーの...

MySQLは集計関数を使用して単一のテーブルをクエリします

集計関数データセットに作用し、そのデータセットの値を返します。 count: 統計結果のレコード数。...

divの適応高さは残りの高さを自動的に埋めます

シナリオ 1: HTML: <div class="outer"> ...

Reactの基本のまとめ

目次序文始めるReactライフサイクルリアクトファイバーリアクトセットステートReactイベントメカ...

CSS スタイルの読み込みの優先順位に関する経験の共有

昨日のプロジェクト開発中に、スタイルの読み込み優先順位に関する問題が発生しました。クラスは定義され、...

MySQLの重複排除操作を極限まで最適化する方法

目次1. インデックスと変数の賢い使用1. インデックスなしの比較テスト2. created_tim...

Jmeterはデータベースプロセスダイアグラムに接続します

1. MySQL jdbc ドライバー (mysql-connector-java-5.1.28.j...

Vue h関数の使い方の詳しい説明

目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...

Vue3 手動カプセル化ポップアップ ボックス コンポーネント メッセージ メソッド

この記事では、ポップアップボックスコンポーネントメッセージのVue3手動カプセル化の具体的なコードを...

Linux で毎日データベースの自動バックアップを設定する方法

この記事では、Centos7.6 システムと Oracle11g を例に挙げます。 1. まずデータ...

CSS 不透明度子要素が親要素の透明度を継承するためのソリューションの詳細な説明

プロジェクト ページの作成中に、子要素が親要素の透明度を継承するという問題に遭遇しました。多くのドキ...

JS が WeChat の「クソ爆弾」機能を実装

みなさんこんにちは、Qiufengです。最近、WeChatは新しい機能をリリースしました(WeCha...

Linux での Tomcat8 のインストールとアンインストールに関する詳細なグラフィック チュートリアル

[ Tomcat8 の Linux インストール ] Tomcat をアンインストールする - まず...

Vue3 (パート 2) Ant Design Vue の統合

目次1. Ant Design Vueを統合する2. コンポーネントの使用1. 完全な引用2. コン...