TOPサーバ構築・運用【データベース夏の陣】極めよ!並列処理> 第5回:並列クエリを上手に使いこなす! (3/3)




【データベース夏の陣】極めよ!並列処理

【データベース夏の陣】極めよ!並列処理

第5回:並列クエリを上手に使いこなす!

著者:株式会社メディカルアーキテクツ 田中 宏昌

公開日:2008/7/30(水)

はてなブックマークの登録数

MERGEテーブルも考慮すべし
 「第1回:DBは習うより慣れよ!」でちょっとだけ触れましたが、MySQLにはMERGEテーブルというものがあります。MERGEという名のとおり、複数のテーブルを引っ付けて、あたかも1つのテーブルであるかのように取り扱うことができます。

 同じスキーマ(テーブル構造)のAというテーブルと、Bというテーブルがあったとすると、この2つを連結したCというMERGEテーブルを作成することができます。そして、Cを検索すると、AとBの両方の内容を検索することができます。

 MERGEテーブルは、それぞれのテーブルのデータをコピーするわけではなく、それぞれに対するリンクを保持するため、ディスク容量を無駄に消費することはありません。

 そして、今回の「並列」という趣旨において大切なことは、テーブルAとテーブルBを、物理的に違うディスク上に設置しておけば、少なくともHDDへのアクセスを並列化することができるので、単純な1テーブルを検索するよりも速度面では有利になります。もちろん、CPUやメモリなどは共有していますから、効果はディスクアクセスに限定されますが、それでも効果はあるでしょう。

 また、MERGEテーブルは、実体となる個々の要素のテーブルへのリンクで構成され、MERGEテーブル自体がディスクに占めるスペースがコンパクトであるということは、さまざまな粒度でMERGEテーブルを作成しておくことも現実的であるということです。例えば、ログを格納するテーブルを1ヶ月単位としておき、直近1年分を検索する際には、直近1年分マージしたMERGEテーブルに対して検索を行い、全体に対して検索を行う場合には、全体をマージしたMERGEテーブルを用いるといった使い方ができます。
図3:MERGEテーブル
MERGEテーブルを作成してみる
 MERGEテーブルの作成は簡単です。あらかじめ、要素となるテーブル(テーブルA、テーブルBなど)を作成しておきます。MERGEテーブルで結合するテーブル(テーブルA、テーブルBなど)のスキーマは、必ず同一にしておいてください。

 MERGEテーブルを作成するには、CREATE TABLE構文を以下のように記述するだけです。

CREATE TABLE [マージテーブル名] (
...
) TYPE=MRG_MyISAM UNION=([テーブルA],[テーブルB]) INSERT_METHOD=LAST;

 テーブル定義は省略していますが、ポイントは最後の行です。TYPE=MRG_MyISAMでMERGEテーブル型を指定し、またUNIONでどのテーブルを結合するかを指定します。最後にINSERT_METHOD で指定したテーブルのうち、どれに書き込むかを指定します(FIRSTかLASTで指定します)。

 1点注意があるとするならば、PRIMARY KEYとなっているキーについて、各要素となるテーブルの中では重複していなくても、これをマージすることで重複する場合が生じます。例えば、テーブルA、Bそれぞれに、IDが1というレコードは1つしかないとしても、これをマージした瞬間に、IDが1というレコードが2つ存在することになります。このため、マージすることが分かっている場合には、PRIMARY KEYが重複しないように付番しておくなどの工夫が必要です。

 5回にわたり、並列クエリについて紹介していきました。第1回のタイトルにもありますが、データベースは「習うよりも慣れろ」ですから、ぜひ、いろいろなシーンで活用してみてください。 タイトルへ戻る



株式会社メディカルアーキテクツ 田中 宏昌
著者プロフィール
株式会社メディカルアーキテクツ 田中 宏昌
株式会社メディカルアーキテクツ、共同経営者。
NTTデータ、NTTデータ経営研究所(出向)にてITプロジェクトの企画や企業の戦略系コンサルティングを数多く経験。その後、外資系医療コンサルティング企業のCIOとして伝説のシステムを数多く作り上げ、2年前に起業。
東京大学工学部航空宇宙工学科卒。
http://www.mediarc.jp/

この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。
ご意見、ご要望にお応えします! インプレスIT INSIDE





INDEX
第5回:並列クエリを上手に使いこなす!
  並列クエリに向いているもの、向いていないもの
  テーブルの上手な分割
-> MERGEテーブルも考慮すべし
【データベース夏の陣】極めよ!並列処理
第1回 DBは習うより慣れよ!
第2回 PHPで並列プログラミング
第3回 結果データを上手にまとめるには?
第4回 集約関数を使いこなす
第5回 並列クエリ上手に使いこなす!
関連記事
データベース夏の陣

Think IT 過去人気記事

注目おすすめ情報

Think IT人気ライター BEST 5