忍者ブログ
ブログ
×

[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の環境なんで他は違う書き方なのか、
大量データはリフレッシュに時間がかかるのかは未検証なので
わかったら更新します。

PR


奥が深いですね。

データ量によって実行計画が変わってしまうので、数千万件単位の
のデータに対応するSQLを組むのが非常に難しい;

INDEXが効いていてもヒット率によってはフルスキャンと変わらないので
悩ましい。
メモ書いておきます。

<SQLチューニングについて参画した現場で今までに学んだこと>

・INDEXが効かない外部結合・Viewを使わない。

・INDEXが効いていても遅い場合はPKで検索する。

・数万件単位の登録・削除を繰り返すと統計情報がずれるので
 ANALYZEを行う。
 (ANALYZEコマンドはCBOには非推奨。なので10gからはプロシージャを使用。)

・GROUP関数を使ったSQLのINDEXはGROUPBY句の項目全指定で
 高速化する。



カレンダー
08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
Taiga
年齢:
44
性別:
男性
誕生日:
1980/09/02
職業:
SE
趣味:
写真・読書
自己紹介:
自然を愛するフリーのSEです。
バーコード
ブログ内検索
最古記事
P R
カウンター
忍者ブログ [PR]