仮想列でのパーティション化では、式についてパーティション化できます。つまり、他の列のデータを使用し、それらの列で計算を実行できます。PL/SQL関数コールは、パーティション化キーとして使用される仮想列の定義ではサポートされません。
仮想列のパーティション化では、すべてのパーティション化方法に加えて、パフォーマンスや管理のための機能もサポートされます。表のアクセスに頻繁に使用される述語が、列から直接取得するのではなく導出する場合には、パーティション・プルーニングの効果を得るために仮想列の使用を検討してください。従来、パーティション・プルーニングの効果を上げるためには、正しい値を取得して計算するために別の列を追加し、問合せで適切な検索を行えるように、列が常に正しい値を含むようにする必要がありました。
例3-14にcar_rentals
表を示します。顧客の確認番号には、レンタカーを借りた場所として2文字の国名が含まれます。レンタカーの分析では通常は地域パターンが評価されるため、国別にパーティション化することに意味があります。
この例では、列country
は、確認番号から導出される仮想列として定義されています。仮想列には記憶域は必要ありません。この例が示すように、行の移動は仮想列でサポートされています。仮想列が別のパーティションにある異なる値と評価されると、その行はデータベースによって別のパーティションに移動されます。
例3-14 仮想列でのパーティション化による表の作成
CREATE TABLE car_rentals ( id NUMBER NOT NULL , customer_id NUMBER NOT NULL , confirmation_number VARCHAR2(12) NOT NULL , car_id NUMBER , car_type VARCHAR2(10) , requested_car_type VARCHAR2(10) NOT NULL , reservation_date DATE NOT NULL , start_date DATE NOT NULL , end_date DATE , country as (substr(confirmation_number,9,2)) ) PARTITION BY LIST (country) SUBPARTITION BY HASH (customer_id) SUBPARTITIONS 16 ( PARTITION north_america VALUES ('US','CA','MX') , PARTITION south_america VALUES ('BR','AR','PE') , PARTITION europe VALUES ('GB','DE','NL','BE','FR','ES','IT','CH') , PARTITION apac VALUES ('NZ','AU','IN','CN') ) ENABLE ROW MOVEMENT;