Oracleのパーティションについてまとめてみた

◼︎ 目次

  1. パーティションについて
  2. パーティションのメリット
  3. パーティションの種類
  4. パーティションの確認
  5. パーティションの作成

Oracle勉強シリーズ

◼︎ パーティションについて

パーテョションとはOracleで大きな表や索引をデータベース内部で複数に領域に分割して管理するための仕組み
例えば4半期毎にパーティションを分割させた場合
通常の[1つの表]->パーティション化すると->[[1-3月][4-6月][7-9月][10-12月]]などに分割させることができる

◼︎ パーティションのメリット

  1. パーティション単位の検索ができるのでデータ量が増えてもパフォーマンスが低下しづらくなる
  2. データの更新、削除などをパーティション単位で行うことが可能
  3. 障害発生時はパーティション単位で影響がわかる

◼︎ パーティションの種類

種類 説明
レンジ 値の範囲でデータを分割する 売上日など日付データで分割
リスト 列の値が等しい行をパーティションとして分割する
複数の値を同一パーティションに割り当てることが可能
  • 地理的要素:関東というパーティションに東京, 神奈川と行を追加する
  • 日付文字列:201501など年月毎にパーティションを作ってその月に買われた商品を追加する
ハッシュ 内部的に生成されるハッシュ値を使ってデータを均等に分割する
レンジ、リスト化できない不連続なデータを均一に分割する場合に有効
顧客番号、商品番号などでデータを分割

◼︎ パーティションの確認

> 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');

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です