FC2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


2010年03月25日

バーチャル・カラム・パーティション

Oracle Database 11g では、バーチャル・カラム
パーティション・キーとしてパーティション・テーブルを作成できます。

例)
パーティション・キーを日付(yyyymmddhh24mmss形式の文字列)カラムの
col_dateから月の部分を引用して'01'~'12'で振り分けた場合
--- テーブル作成
create table sample_table (
col_date char(14) not null,
col_1 number(3) not null,
col_2 varchar2(10) null,
partitionkey as (substr(col_date, 5, 2)) virtual
)
partition by list (partitionkey) (
partition p_1 values ('01'),
partition p_2 values ('02'),
partition p_3 values ('03'),
partition p_4 values ('04'),
partition p_5 values ('05'),
partition p_6 values ('06'),
partition p_7 values ('07'),
partition p_8 values ('08'),
partition p_9 values ('09'),
partition p_10 values ('10'),
partition p_11 values ('11'),
partition p_12 values ('12')
);

--- サンプルデータ追加
insert into sample_table (col_date, col_1, col_2)
values (
to_char(sysdate - interval '1' month, 'yyyymmddhh24miss'),
1,
'test1'
);
insert into sample_table (col_date, col_1, col_2)
values (
to_char(sysdate - interval '3' month, 'yyyymmddhh24miss'),
2,
'test2'
);

--- サンプルテーブル参照
select * from sample_table;

COL_DATE COL_1 COL_2 PART
-------------- ---------- ---------- ----
20100225115232 1 test1 02
20091225115232 2 test2 12
最近携わった仕事では、
Oracle 10gを使用したシステムにおいて数百万件のデータが保持されるテーブルを
パーティション・テーブルとして定義、パーティション・キーのカラムをchar(2)で設け、
データが持つ日付情報の日('01'~'31')にて振り分けるようにしています。
仮にOracle 11gであればバーチャル・カラムを設けてパーティション・キーとして
扱うことができたと思います。この場合、データを投入する側はパーティション・キーの
カラムを意識せずにデータ投入できます。ただしINSERT文でカラムを明示的に指定している
ことが前提となります。またバーチャル・カラムを用いた場合のINSERTに掛かる負荷が
どの程度か検証は必要かと思います。

[ posted by kami ]

この記事に対するコメント


この記事に対するコメントの投稿














管理者にだけ表示を許可する



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/460-c74c1d27
この記事にトラックバックする(FC2ブログユーザー)











上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。