ホームページ  >  記事  >  データベース  >  Mysql の MERGE ストレージ エンジンの概要 (コード例)

Mysql の MERGE ストレージ エンジンの概要 (コード例)

不言
不言転載
2019-02-14 13:21:421808ブラウズ

この記事では、Mysql の MERGE ストレージ エンジンについて説明します (コード例)。必要な方は参考にしていただければ幸いです。

MERGE ストレージ エンジンは、一連の MyISAM データ テーブルを論理ユニットとして扱い、それらを同時にクエリできるようにします。 MERGE データ テーブル構造を構成する MyISAM データ テーブルの各メンバーは、まったく同じテーブル構造を持つ必要があります。各メンバー データ テーブルのデータ列は、同じ名前と型で同じ順序で定義する必要があり、インデックスも同じ順序で同じ方法で定義する必要があります。複数のログ データ テーブルがあり、その内容が過去数年間の各年のログ レコード アイテムであるとします。その定義は次のとおりです。YY は年を表します (推奨コース: MySQL チュートリアル )

CREATE TABLE log_YY ( 
    dt DATETIME NOT NULL, 
    info VARCHAR(100) NOT NULL, 
    INDEX (dt) 
) ENGINE = MyISAM;

現在のログ データ テーブルのコレクションに log_2004、log_2005、log_2006、log_2007 が含まれているとします。次に示すように MERGE データ テーブルを作成して、それらを 1 つの論理ユニットにグループ化できます。

CREATE TABLE log_merge ( 
    dt DATETIME NOT NULL, 
    info VARCHAR(100) NOT NULL, 
    INDEX(dt) 
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);

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

SELECT COUNT(*)FROM log_merge;

次のクエリを使用して、過去数年間のそれぞれに存在するログ レコード エントリの数を確認します。 ##

SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;

MERGE データ テーブルでは、複数のクエリを発行せずに複数のデータ テーブルを同時に簡単に参照できることに加えて、次のような利便性も提供します。

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

2) 圧縮されたデータ テーブルが MERGE データ テーブルに含まれます。たとえば、特定の年の終わり以降は、対応するログ ファイルにレコードを追加する必要がなくなるため、myisampack ツールを使用してログ ファイルを圧縮して領域を節約でき、MERGE データ テーブルは引き続き通常どおり機能します。 3 )、MERGE データ テーブルは DELETE および UPDATE 操作もサポートします。 MySQL は新しいデータ行をどのメンバー テーブルに挿入する必要があるかを知る必要があるため、INSERT 操作はさらに面倒です。 MERGE データ テーブルの定義には INSERT_METHOD オプションを含めることができます。このオプションの値は NO、FIRST、LAST です。これらの意味は、INSERT 操作が禁止され、新しいデータ行が現在の UNION オプションに挿入されることです。 . 最初のデータ テーブルまたは最後のデータ テーブル。たとえば、次の定義は、log_merge テーブルに対する INSERT 操作を、UNION オプションにリストされている最後のテーブルである log_2007 テーブルに対する INSERT であるかのように扱います。

CREATE TABLE log_merge( 
    dt DATETIME NOT NULL, 
    info VARCHAR(100) NOT NULL, 
    INDEX(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 の MERGE ストレージ エンジンの概要 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。