[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
データの更新頻度が少ないもしくは更新タイミングが決められている
マスタテーブルなどの参照で、結合等々でレスポンスが出ない場合、
マテリアライズド・ビューが有効だそうな。
用途はビューと同じだが、定期的に更新される上インデックスを
設定できるので、必要なデータだけが入った単一テーブルとして
参照ができる。
作成手順を書いてみた。
1:マテリアライズド・ビューを作成する。
create materialized view ビュー名
refresh force with rowid
as
SELECT 項目名 FROM (スキーマ).参照テーブル
/
2:インデックスを設定する。
TABLESPACEの設定は環境によって適宜変更する。
CREATE UNIQUE INDEX スキーマ.インデックス名 ON スキーマ.ビュー名 (1, 2・・・)
TABLESPACE USERS LOGGING PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 16K NEXT 328K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 50
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT )
/
3:リフレッシュグループの設定する。
ビューのデータを更新するタイミングをグループ単位で設定できる。
<<実用最低限の項目の意味と設定値。他は適宜設定>>
next_date :次回リフレッシュ日付。初回は最初の更新タイミングとなり、以降は勝手に書き換わる。
interval :リフレッシュ間隔 この間隔を元にnext_dateは算出されて書き換わる。
<例:2010/02/12の1時開始で1日おきにリフレッシュをしたい場合。>
BEGIN
DBMS_REFRESH.MAKE(
name => '"リフレッシュグループ名"',
list => '',
next_date => to_date('12-02-2010 01:00:00', 'MM-DD-YYYY HH24:MI:SS'),
interval => '/*1:Day*/ sysdate + 1',
implicit_destroy => FALSE,
lax => FALSE,
job => 0,
rollback_seg => NULL,
push_deferred_rpc => FALSE,
refresh_after_errors => FALSE,
purge_option => NULL,
parallelism => 0);
END;
/
4:マテリアライズド・ビューをリフレッシュグループに追加する。
複数登録したい場合は対称ビュー分書く
BEGIN
DBMS_REFRESH.ADD(
name => '"リフレッシュグループ名"',
list => '"ビュー名"',
lax => TRUE);
END;
10gの環境なんで他は違う書き方なのか、
大量データはリフレッシュに時間がかかるのかは未検証なので
わかったら更新します。

