MERGEテーブルも考慮すべし

MERGEテーブルも考慮すべし

 「第1回:DBは習うより慣れよ!(http://www.thinkit.co.jp/article/97/1/)」でちょっとだけ触れましたが、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テーブルを用いるといった使い方ができます。

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回のタイトルにもありますが、データベースは「習うよりも慣れろ」ですから、ぜひ、いろいろなシーンで活用してみてください。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30