もう1つのDB2 9のパーティション機能に多次元クラスタリング(MDC)というものがあります。これは1つの表を複数の次元の属性に合わせてデータを格納する方法です。これは、例えば図3のように年月・製品・地域という次元を指定した場合、2007年7月東京でのDB2の売上は、セルと呼ばれる同じ場所に格納されます。

図3:多次元クラスタリング(MDC) (画像をクリックすると別ウィンドウに拡大図を表示します)
従って、2007年7月の売上を照会したいのであれば、年月の次元で2007年7月に存在するセルだけ(図3では4つのセル)を読めばいいことになります。
この機能のメリットは、主に以下の3つがあげられます。
- 次元別検索によるパフォーマンス向上
- 次元の対象データのみの部分アクセスで効率がよいため
- データ並べ替えを目的とした再編成不要
- 同じ属性の値は同じ場所に格納されているので、そもそもデータが乱れない
- 削除のパフォーマンスアップ
- 次元に指定した年月単位で削除する場合、セルをリリースだけでDELETEが完了するので非常に高速
表2:DB2 9のパーティション機能のメリット
MDCの定義と運用は簡単に行うことができます。
作成SQL例:
CREATE TABLE MDC1 (
Date DATE,地域 CHAR(10),製品 VARCHAR(10),
年月 generated always as (INTEGER(Date)/100), ... )
ORGANIZE BY DIMENSIONS (年月, 地域, 製品)
上のリストのように表作成時にORGANIZE BY DIMENSIONSの後に列名を指定するだけで、DB2が属性に応じて自動的にデータを格納します。例えば新たに2007年8月のデータがInsertされたら、その時に新しいブロックをアロケーションし、そこに2007年8月のデータを格納していくので、表定義のメンテナンスが一切不要です。
履歴型でデータが増えながらも、このMDC表で「製品別」といった何らかの単位で集計されることが多い明細表などを作成することで、集計バッチを高速にすることも可能といえるでしょう。
|