パーティションの種類
ハッシュ・パーティション
• ハッシュ値を利用してデータを均等に配分するパーティション表
•
パーティションの数を指定すると、自動的にデータが分割される※ハッシュアルゴリズムの関係で、なるべく均等に配分するためには、パーティションの数は2の累乗に設定します
CREATE TABLE “売上表”
(“商品ID”number(5) not null,
“場所” varchar2(60),
”顧客ID” number(38))
PARTITION BY HASH (“商品ID”) PARTITIONS 4
STORE IN (Users1, Users2 , Users3 , Users4);
なるべく一意な列にする必要がある パーティションの数を指定
ハッシュ値1 ハッシュ値2
ハッシュ値3 ハッシュ値4
売上表
25万件
25万件 25万件
25万件
パーティションの種類
リファレンス・パーティション
• 親子関係を利用したパーティショニング手法
•
親表を参照する子表の外部キーを利用• 例 ) 親子関係の表 Orders と OrderItems における リファレンス・パーティション
•
親表:order_date
をキーにしてパーティション化•
子表:orderitems_fk
をキーにしてパーティション化表名 列名
Orders order_id order_date customer_id
表名 列名
OrderItems order_id line_item_id product_id quantity
子表には order_date列 が存在しない 親:Orders
参照整合性制約名
orderitems_fk
子:OrderItems
リファレンス・パーティション
子表の作成
CREATE TABLE orderitems(
order_idNUMBER(12) NOT NULL,
line_item_id NUMBER(3) NOT NULL, product_id NUMBER(6) NOT NULL, quantity NUMBER(8),
CONSTRAINT orderitems_fk
FOREIGN KEY (order_id) REFERENCES orders(order_id) ) PARTITION BY REFERENCE (orderitems_fk) ;
1 2
2 3 1
3
外部キーを設定するカラムに、
NOT NULL
制約を設定する 親表の主キー又は一意キーを参照する外部キーを作成するPARTITION BY REFERENCE句に、その外部キーを指定する
パーティションの種類
バーチャルカラム・パーティション
• 実データは持たず、他のカラムから関数によって定義される 仮想的な列
•
例) acc_no(
アカウント番号)
の上2
桁をacc_branch(
支店番号)
として 用いる場合CREATE TABLE accounts
(acc_no number(10) not null, acc_name varchar2(50) not null,
acc_branch number(2) GENERATED ALWAYS AS
(to_number(SUBSTR(to_char(acc_no),1,2))) VIRTUAL );
補足:GENERATED ALWAYS 及び VIRTUAL句は構文を明確にするため につける語句であり、省略可能
acc_no acc_name acc_branch
12500 Adams 12
12507 Blake 12
12666 King 12
13666 Smith 13
パーティションの種類
バーチャルカラム・パーティション
• バーチャルカラムをパーティション・キーとした パーティショニング手法
•
実カラムを追加することなく、目的のパーティションを作成することが可能
CREATE TABLE accounts (
acc_no number(10) not null,
acc_name varchar2(50) not null, ...
acc_branch number(2) GENERATED ALWAYS AS ( to_number(SUBSTR(to_char(acc_no),1,2)) VIRTUAL ) PARTITION BY LIST (acc_branch)
(
・・・PARTITION brunch_p12 VALUES (12),
・・・
PARTITION others VALUES (default) );
全支店横断的に検索 毎日支店ごとに
データローディング
コンポジット・パーティション
レンジ - リスト・コンポジット・パーティション
• レンジ・パーティションをさらにリスト・パーティションに分割
•
例えば、売上表を「期間」(レンジ)と「地域」(リスト)で分割するA支店 B支店 C支店 D支店
2008年 6月1日 (”売上日”) 2008年 6月2日 (”売上日”) 2008年 6月3日 (”売上日”) 2008年 6月4日 (”売上日”)
レンジ・パーティション
リスト・サブパーティション
支店ごとの売上 データの集計
CREATE TABLE
“売上表”(
”売上日”