13.4 表のマトリクス分割

表の二つの列を分割キーとして,分割方法の指定を組み合わせて分割することをマトリクス分割といいます。一つ目の分割キーとなる列を第1次元分割列,二つ目の分割キーとなる列を第2次元分割列といいます。マトリクス分割は,第1次元分割列で境界値指定のキーレンジ分割をし,分割されたデータをさらに第2次元分割列で分割します。第2次元分割列に指定できる分割方法を次に示します。

マトリクス分割によって分割された表をマトリクス分割表といいます。

なお,表をマトリクス分割するためには,HiRDB Advanced Partitioning Optionが必要です。

<この節の構成>
(1) 表のマトリクス分割の効果
(2) 適用基準
(3) 定義方法
(4) マトリクス分割の例

(1) 表のマトリクス分割の効果

複数の列を分割キーとして分割することで得られる効果を次に示します。

(2) 適用基準

次の場合,境界値指定のキーレンジ分割の組み合わせをお勧めします。

次の場合,境界値指定のキーレンジ分割とハッシュ分割の組み合わせをお勧めします。

次の場合,境界値指定のキーレンジ分割とハッシュ分割の組み合わせで,ハッシュ分割に指定するRDエリア名を重複指定することをお勧めします。同じRDエリア名を重複指定することによって,分割数はそのままで,実際に使用するRDエリア数を減らすことができます。また,各RDエリアに格納するデータ量も均等にできます。RDエリア名を重複指定する場合については,「図13-4 ハッシュ分割で表格納用RDエリアを重複指定する例」を参照してください。

(3) 定義方法

定義系SQLのCREATE TABLEPARTITIONED BY MULTIDIMオペランドで次の指定をします。

定義時の規則を次に示します。

定義例は「(4)マトリクス分割の例」を参照してください。

(4) マトリクス分割の例

(a) 境界値指定のキーレンジ分割の組み合わせの場合

顧客表の登録日及び店番号に境界値を指定し,登録日と店番号によって,表をマトリクス分割します。それぞれの顧客データを次のようにユーザ用RDエリア(USR01~USR06)に格納します。格納するのに必要なユーザ用RDエリア数は,(境界値数+1)×(境界値数+1)なので,この例の場合,3×2=6です。

登録日店番号
100以下100より大きい
2000年以前USR01USR02
2001年USR03USR04
2002年以降USR05USR06

マトリクス分割する表を定義するSQL文を次に示します。

CREATE FIX TABLE 顧客表
 (登録日 DATE, 店番号 INT, 顧客名 NCHAR(10))
 PARTITIONED BY MULTIDIM(
 登録日 (('2000-12-31'),('2001-12-31')), …1.
 店番号 ((100))                          …2.
 )IN ((USR01,USR02),(USR03,USR04),(USR05,USR06))

〔説明〕
  1. 第1次元分割列名(一つ目の分割キーとなる列名)と,その境界値リストを指定します。
  2. 第2次元分割列名(二つ目の分割キーとなる列名)と,その境界値リストを指定します。

マトリクス分割の例を次の図に示します。

図13-15 マトリクス分割の例(境界値指定のキーレンジ分割の組み合わせ)

[図データ]

(b) 境界値指定のキーレンジ分割とハッシュ分割の組み合わせの場合

第2次元分割列でFIXハッシュ分割する場合の例について説明します。

顧客表の登録日に境界値を指定し,店番号と地域コードをハッシュ関数で三分割することによって,表をマトリクス分割します。それぞれの顧客データを次のようにユーザ用RDエリア(USR01~USR09)に格納します。格納するのに必要なユーザ用RDエリア数は,(境界値数+1)×(ハッシュ関数で分割するユーザ任意の数)なので,この例の場合,3×3=9です。

登録日店番号と地域コード(ハッシュ関数で三分割)
2002年以前USR01USR02USR03
2003年USR04USR05USR06
2004年以降USR07USR08USR09

マトリクス分割する表を定義するSQL文を次に示します。

CREATE FIX TABLE 顧客表
 (登録日 DATE, 店番号 INT, 地域コード INT, 顧客名 NCHAR(10))
 PARTITIONED BY MULTIDIM
 (登録日 (('2002-12-31'),('2003-12-31')), …1.
 FIX HASH HASH6 BY 店番号, 地域コード     …2.
 )IN ((USR01,USR02,USR03),
      (USR04,USR05,USR06),
      (USR07,USR08,USR09))

〔説明〕
  1. 第1次元分割列名(一つ目の分割キーとなる列名)と,その境界値リストを指定します。
  2. 第2次元列分割名(二つ目の分割キーとなる列名)と,ハッシュ関数名を指定します。

マトリクス分割の例を次の図に示します。

図13-16 マトリクス分割の例(境界値指定のキーレンジ分割とハッシュ分割の組み合わせ)

[図データ]