MySQLのMERGEストレージエンジンの詳細な説明

MySQLのMERGEストレージエンジンの詳細な説明

MERGE ストレージ エンジンは、MyISAM テーブルのグループを論理ユニットとして扱い、同時にクエリを実行できるようにします。 MERGE データ テーブル構造を構成する各メンバー MyISAM データ テーブルは、まったく同じテーブル構造を持つ必要があります。各メンバー テーブルの列は同じ名前とタイプで同じ順序で定義する必要があり、インデックスも同じ順序と方法で定義する必要があります。複数のログ データ テーブルがあり、各テーブルに過去数年間の各年のログ エントリが含まれているとします。定義は次のとおりです。YY は年を表します。

テーブル log_YY を作成します ( 
  dt DATETIME NULLではありません、 
  情報 VARCHAR(100) NOT NULL、 
  インデックス(dt) 
)エンジン = MyISAM;

現在のログ データ テーブル セットに log_2004、log_2005、log_2006、および log_2007 が含まれていると仮定します。次に示すように MERGE データ テーブルを作成し、それらを論理単位にグループ化できます。

テーブル log_merge を作成します ( 
  dt DATETIME NULLではありません、 
  情報 VARCHAR(100) NOT NULL、 
  インデックス(dt) 
) ENGINE = MERGE UNION = (log_2004、log_2005、log_2006、log_2007);

ENGINE オプションの値は MERGE である必要があり、UNION オプションには、この MERGE テーブルに含まれる関連テーブルがリストされます。この MERGE が作成されると、他のデータ テーブルと同様にクエリを実行できます。ただし、各クエリは各メンバー データ テーブルに対して同時に実行されます。次のクエリを使用すると、上記のログ データ テーブル内のデータ行の合計数を知ることができます。

log_mergeからCOUNT(*)を選択します。

次のクエリは、各年の各年にログ エントリがいくつあるかを判断するために使用されます。

YEAR(dt) AS y、COUNT(*) AS エントリ FROM log_merge GROUP BY y; を選択します。

MERGE テーブルでは、複数のクエリを発行せずに複数のテーブルを同時に参照することが容易になるだけでなく、次のような利便性も提供されます。

1) MERGE テーブルを使用すると、各 MyISAM テーブルで許可されている最大長を超えるサイズの論理ユニットを作成できます。

2) 圧縮されたデータ テーブルは MERGE データ テーブルに含まれます。たとえば、ある年が過ぎると、対応するログ ファイルにレコードを追加することはなくなるため、myisampack ツールを使用してログ ファイルを圧縮してスペースを節約できます。また、MERGE テーブルは通常どおり機能します。

3) MERGE データ テーブルは、DELETE および UPDATE 操作もサポートします。 INSERT 操作は、MySQL が新しいデータ行をどのメンバー テーブルに挿入するかを知る必要があるため、より面倒です。 MERGE テーブルの定義には、INSERT_METHOD オプションを含めることができます。このオプションの可能な値は NO、FIRST、LAST です。これらはそれぞれ、INSERT 操作が禁止され、新しいデータ行が現在の UNION オプションにリストされている最初のテーブルまたは最後のテーブルに挿入されることを意味します。たとえば、次の定義では、log_merge テーブルに対する INSERT 操作を、UNION オプションにリストされている最後のテーブルである log_2007 テーブルに対する INSERT として扱います。

テーブル log_merge を作成します ( 
  dt DATETIME NULLではありません、 
  情報 VARCHAR(100) NOT NULL、 
  インデックス(dt) 
) ENGINE = MERGE UNION = (log_2004、log_2005、log_2006、log_2007) INSERT_METHOD = LAST;

同じテーブル構造を持つ新しいメンバー テーブル log_2009 を作成し、log_merge テーブルを変更して log_2009 を含めます。log_2009:

CREATE TABLE log_2009 LIKE log_2008; // 古いテーブルに基づいて新しいテーブルを作成します ALTER TABLE log_merge UNION = (log_2004, log_2005, log_2006,log_2007,log_2008,log_2009);

以下もご興味があるかもしれません:
  • MySQL での挿入または更新操作の実装 (Oracle の merge ステートメントに類似)
  • MySQLMerge ストレージ エンジン

<<:  Centos8 システムの VMware インストール チュートリアル図 (中国語グラフィカル モード)

>>:  ミニプログラム開発ツールのソースコードからの基本実装の分析

推薦する

CentOS システムのディスク パーティションを拡張する方法

問題/障害/シナリオ/要件Eve-ng の仮想マシン OVA のハードディスクは 38G しかないた...

MySQLでデータを削除してもディスク領域が解放されないのはなぜですか

目次問題の説明解決問題分析問題の説明MySQL で delete ステートメントを使用してデータを削...

進捗バー効果を実現するJavaScript

この記事では、プログレスバー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

react-beautiful-dnd を使用してリスト間のドラッグ アンド ドロップを実装する

目次react-beautiful-dndを選ぶ理由基本的な使い方基本概念使い方使用中に発生した問題...

sbinディレクトリを生成せずにNginxをインストールするソリューション

エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...

MySQL スロークエリログの役割と公開

序文MySQL スロー クエリ ログは、MySQL が提供するログ レコードの一種です。これは、応答...

JavaScript によるデータ視覚化: ECharts マップの作成

目次概要予防1. 使用方法2. 実装手順予備実装コード効果: Geo共通設定上記の構成を追加した後の...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

HTML で水平ナビゲーション構造を設定する方法

この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...

ウェブサイトのBGM実装方法

個々のウェブマスターにとって、自分のウェブサイトをいかにユニークで個性あふれるものにするかは、常に絶...

Python ベースの MySQL レプリケーション ツールの詳細な説明

目次1. はじめに2回目の練習2.1 インストールと設定2.2 コアクラスの紹介2.3 使い方は? ...

Reactプロジェクトの新規作成からデプロイまでの実装例

新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...

mySQLキーワードの実行優先度の説明

以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...

Webフロントエンドのパフォーマンス最適化

ウェブフロントエンド最適化のベストプラクティス: コンテンツWebフロントエンド最適化のベストプラク...

JavaScript の 50 以上のユーティリティ関数の概要

JavaScript は多くの素晴らしい機能を備えています。この記事では、作業効率の向上とコードのデ...