◼︎ 概要
Oracle勉強シリーズ
- Oracleの表領域についてまとめてみた
- Oracleのパーティションについてまとめてみた
- Oracle ダイレクトロードインサートについて
- OracleのSEQUENCEについて
- Oracleのパーティションインデックスについて
- Oracleのフェイルオーバーについて
- Oracle11gから12cへの移行の注意点
◼︎ パーティションについて
パーテョションとはOracleで大きな表や索引をデータベース内部で複数に領域に分割して管理するための仕組み
例えば4半期毎にパーティションを分割させた場合
通常の[1つの表]->パーティション化すると->[[1-3月][4-6月][7-9月][10-12月]]などに分割させることができる
◼︎ パーティションのメリット
- パーティション単位の検索ができるのでデータ量が増えてもパフォーマンスが低下しづらくなる
- データの更新、削除などをパーティション単位で行うことが可能
- 障害発生時はパーティション単位で影響がわかる
◼︎ パーティションの種類
| 種類 | 説明 | 例 |
| レンジ | 値の範囲でデータを分割する | 売上日など日付データで分割 |
| リスト |
列の値が等しい行をパーティションとして分割する 複数の値を同一パーティションに割り当てることが可能 |
|
| ハッシュ |
内部的に生成されるハッシュ値を使ってデータを均等に分割する レンジ、リスト化できない不連続なデータを均一に分割する場合に有効 |
顧客番号、商品番号などでデータを分割 |
◼︎ パーティションの確認
> select table_name,partition_name,tablespace_name,subpartition_count from user_tab_partitions order by table_name,partition_name; // カンマ区切りで出力バージョン > select table_name||','||partition_name||','||tablespace_name||','||subpartition_count from user_tab_partitions order by table_name,partition_name;
◼︎ パーティションの作成
yyyymmのリストパーティションを作成してみたSELECT時に「WHERE SELL_YM=’201601’」と指定すると’201601’のパーティションだけ見に行くのでテーブルフルスキャンしなくなるので早くなる
// テーブルの作成
CREATE TABLE TEST_TABLE (
SELL_YM CHAR(6) NOT NULL,
USER_ID VARCHAR2(12)
)
PARTITION BY LIST (SELL_YM)
(
PARTITION B201601 VALUES ('201601'),
PARTITION B201602 VALUES ('201602'),
PARTITION B201603 VALUES ('201603'),
PARTITION B201604 VALUES ('201604'),
PARTITION B201605 VALUES ('201605'),
PARTITION B201606 VALUES ('201606')
);
// データの追加
INSERT INTO TEST_TABLE (SELL_YM, USER_ID) VALUES ('201601', 'tomsato');
コメントを書く
コメント一覧