◼︎ 概要
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');
コメントを書く
コメント一覧