MySQL MERGEストレージエンジンの概要
2211 ワード
MERGEストレージエンジンは、MyISAMデータテーブルのセットを論理ユニットとして扱い、同時にクエリーを行うことができます.1つのMERGEデータテーブル構造を構成する各メンバーMyISAMデータテーブルは、完全に同じ構造を有しなければならない.各メンバー・データ・テーブルのデータ・カラムは、同じ名前とタイプを同じ順序で定義する必要があります.インデックスも同じ順序で定義する必要があります.
いくつかのログ・データ・テーブルがあるとします.この数年間のログ・レコード・アイテムの内容は次のように定義されています.YYは年を表します.
ログ・データ・テーブルの現在のセットにlog_が含まれていると仮定します.2004、log_2005、log_2006、log_2007年には、次のようなMERGEデータテーブルを作成して論理ユニットにまとめることができます.
ENGINEオプションの値はMERGEでなければなりません.UNIONオプションには、このMERGEデータテーブルに収録される各関連データテーブルがリストされています.
このMERGEを作成すると、他のデータ・テーブルのようにクエリーできますが、クエリーごとにメンバー・データ・テーブルごとに同時に機能します.次のクエリでは、上記のログ・データ・テーブルのデータ行の合計数を示します.
次のクエリは、ここ数年で毎年どのくらいのログ・レコードがあるかを決定するために使用されます.
複数のクエリーを発行せずに複数のデータ・テーブルを同時に参照するのに便利なほか、MERGEデータ・テーブルには以下のような便利さがあります. MERGEデータテーブルは、各MyISAMデータテーブルが許容する最大長を超えるサイズの論理ユニット を作成するために使用することができる.圧縮されたデータテーブルがMERGEデータテーブルに含まれているのを見てください.たとえば、ある年が終わると、対応するログファイルにレコードを追加しないはずです.myisampackツールで圧縮してスペースを節約できますが、MERGEデータテーブルはいつものように で動作します.
MERGEデータテーブルもDELETEとUPDATE操作をサポートしています.INSERTの操作は面倒です.MySQLは新しいデータ行をどのメンバー表に挿入すべきかを知る必要があります.MERGEデータテーブルの定義にINSERT_を含めることができますMETHODオプション、このオプションの値はNO、FIRST、LASTであり、INSERT操作が禁止されていることを意味し、新しいデータ行が現在のUNIONオプションにリストされている最初のデータテーブルまたは最後のデータテーブルに挿入される.たとえば、以下の定義はlog_mergeデータテーブルのINSERT操作は対log_とする2007データテーブル:UNIONオプションにリストされた最後のデータテーブルです.
新しいメンバーデータテーブルlog_を作成2009年に同じテーブル構造を持たせ、logを変更します.mergeデータテーブルlog_2009に含める:
いくつかのログ・データ・テーブルがあるとします.この数年間のログ・レコード・アイテムの内容は次のように定義されています.YYは年を表します.
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データテーブルを作成して論理ユニットにまとめることができます.
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データ・テーブルには以下のような便利さがあります.
MERGEデータテーブルもDELETEとUPDATE操作をサポートしています.INSERTの操作は面倒です.MySQLは新しいデータ行をどのメンバー表に挿入すべきかを知る必要があります.MERGEデータテーブルの定義にINSERT_を含めることができますMETHODオプション、このオプションの値はNO、FIRST、LASTであり、INSERT操作が禁止されていることを意味し、新しいデータ行が現在のUNIONオプションにリストされている最初のデータテーブルまたは最後のデータテーブルに挿入される.たとえば、以下の定義はlog_mergeデータテーブルのINSERT操作は対log_とする2007データテーブル:UNIONオプションにリストされた最後のデータテーブルです.
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);