パーティションの種類
パーティション表とはテーブル(インデックス)を任意の分類によって異なる表領域で格納することができる仕組みである。
大規模なデータベースにおいては必須といえる機能である。パーティション索引にはパーティション単位で独立したローカル・インデックスと独立したパーティション化が可能なグローバル・インデックスの2つがある。
分類されたパーティション表の個々には別の領域属性が設定できる。例えば更新されない領域を
他と区別して PCTFREE 0 にするということも可能になる。パーティション単位に独立した様々な管理操作も可能になる。
レンジ・パーティション (Range Partition)
レンジ・パーティションを使用する例として非常に有用と思われるのが日付によるパーティショニングである。
例えば、月毎にパーティション化を行ない、保持期限が終了したらバックアップ媒体などに保管したのち
パーティションごとトランケートするなどである。
- パーティション・プルーニング対象条件述語
等価、範囲指定(< , > , BETWEEN a AND b など)、前方一致の LIKE または IN (...)
インターバル・パーティション
(時間をキーにした)レンジパーティションの拡張機能
インターバル・パーティション(マニュアルでは時間隔パーティション)は レンジパーティションに指定されている値域を超えたデータが登録されると指定したレンジ(時間間隔)のパーティションを自動的に作成する。
ローテーションなど細かな芸当はできないがメンテナンス作業が自動化されることでメンテナンス直後のエラーの心配が1つ減るという地味だがDBAにとって結構便利な機能。
(従来のレンジパーティションでもあらかじめ用意しておいた1つのオーバーフロー用のパーティションに入れることは可能)
リスト・パーティション (List Partition)
レンジ・パーティションを使用する例としてはコード体系として統廃合がほとんど発生しないものに対して有効である。
都道府県コード(JIS)単位、任意に選択した大口の取引先とその他、JIS などで体系付けされたコードなどに使用すれば良いだろう。
- パーティション・プルーニング対象条件述語
等価、範囲指定(< , > , BETWEEN a AND b など)、前方一致の LIKE または IN (...)
- (注意) 複数カラムによるリスト・パーティションは定義できない。
ハッシュ・パーティション (Hash Partition)
ハッシュ・パーティションは上記の2つのパーティショニングと異なり分割する方法を Oracle に任せる方式である。
例えば大量のエンドユーザーや顧客のアカウント管理にメールアドレスを使用している場合のパーティショニングなどに都合がよい。
メールアドレスを多く収集するとヒストグラムが偏っている。レンジ・パーティションで分けると特定のパーティション
にデータが集中することになり容量設計も難しくなる。このようなときにハッシュ・パーティションを使用すれば
平均的にデータを分散することが可能になる。
ただし、格納パーティションの選択にはハッシュ関数が利用される。
ハッシュ関数とは、ある値から情報を故意に間引き、復元不可能な別なビット列に変換する関数である。
完全に一方向の変換関数のため、もし 2 つの隣接した値を変換したとしてもハッシュ値では関連性は全く残らない。
すなわち範囲検索を実行することができない。
但し、同じ入力値、同じシード値、同じバケット数であれば同じハッシュ値になるので等価検索は可能である。
リファレンス・パーティション
リファレンス・パーティション(マニュアルでは参照パーティション)は、親子の参照制約(外部キー制約) を使用して子表に親のパーティションのスキームを継承することができる。
簡単に説明すると…たとえば ある表を「キーA」でパーティション化した場合に参照制約のある子表に「キーA」を定義存在しない場合であっても「キーA」でパーティション化することができる。
バーチャル・カラム・パーティション
バーチャル・カラムは Oracle 11g からの新機能でテーブルに実体を保存することなく定義できるカラム。任意の計算式などを割り当てたりすることができる。
この仮想的なカラムを使用したパーティショニングもできる。例えばカラムの先頭の数文字によるパーティショニングが可能
コンポジット・パーティション
コンポジット・パーティション(複合パーティション)
レンジ・ハッシュ、リスト・ハッシュ、リスト・レンジなどのパーティション構造を2層化したものである。
現在では3層以上のコンポジット・パーティションは作成できない。
パーティション・プルーニング (Partition Pruning)
以前はパーティション・エリミネーションという名前であったが改名している。
当初、読み方が微妙に違うのであるがパーティション・プルイング? (Partition Pulling) かと思っていたが Pruning(除外)が正解で、意味合いがまるで反対であった。
パーティション・プルーニングはオプティマイザが自動的に抽出条件から判断するものである。
しかし、インデックスを使用するときと同じ注意をもって SQL を記述する必要がある。
例えばパーティションキーの列に関数を適用するとパーティション・プルーニングは機能しなくなる。
キーに対して関数の使用が常態であれば、関数を使用したパーティショニング構成にする方が良い。
パーティション表 関連事項
ライセンス
注意 この機能には Enterprise Edition の Partitioning オプションのライセンスが必要。
サイト統合にともない代替情報の URL は不明