• 検索結果がありません。

パーティションの種類

ハッシュ・パーティション

• ハッシュ値を利用してデータを均等に配分するパーティション表

パーティションの数を指定すると、自動的にデータが分割される

※ハッシュアルゴリズムの関係で、なるべく均等に配分するためには、パーティションの数は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

“売上表”

(

”売上日”

DATE, “地域” VARCHAR2(20), “売上” NUMBER )

PARTITION BY RANGE (”売上日”) SUBPARTITION BY LIST (

“地域”

) (PARTITION P2009Q1

VALUES LESS THAN(to_date('2009-04-01','YYYY-MM-DD')) (SUBPARTITION P2009Q1_kanto VALUES (‘kanagawa','Tokyo'),

SUBPARTITION P2009Q1_kansai VALUES ('Osaka',‘kyoto')

),

関連したドキュメント