マテリアライズド・ビューの概念(Materialized View)

Materialized View

マテリアライズド・ビューは、データの集計、計算、レプリケートおよび分配に使用できるスキーマ・オブジェクトである。

  • データ・ウェアハウスでは、マテリアライズド・ビューは、合計値や平均値など、集計されたデータを計算して格納するために使用される。通常、このような環境では、マテリアライズド・ビューには集計データが格納されるため、サマリーと呼ばれる。また、マテリアライズド・ビューは、集計操作の有無に関係なく、結合の計算にも使用できる。
  • 分散環境では、マテリアライズド・ビューは、分散サイトでデータをレプリケートし、複数のサイトで実行される更新を競合解消方法に従って同期化するために使用される。レプリカとしてのマテリアライズド・ビューは、他の方法ではリモート・サイトからのアクセスを必要とするデータへのローカル・アクセスを提供する。
  • モバイル・コンピューティング環境では、マテリアライズド・ビューは中央のサーバーからモバイル・クライアントにデータのサブセットをダウンロードし、中央のサーバーから定期的にリフレッシュし、クライアントで実行された更新を中央のサーバーに伝播させるために使用される。
マテリアライズド・ビューの特徴
  • 記憶域を使用する。
  • マスター表のデータに変更があった場合は、リフレッシュする必要がある。
  • クエリー・リライトに使用すると、SQLの実行効率が改善される。
  • SQLアプリケーションとユーザーに対して透過的である。
サマリー管理のコンポーネント
  • マテリアライズド・ビューおよびディメンションの定義機能。
  • すべてのマテリアライズド・ビューに最新データが確実に含まれるようにするリフレッシュ機能。
  • マテリアライズド・ビューを使用するために問合せを透過的にリライトするクエリー・リライト機能。
  • 作成するべきマテリアライズド・ビューおよび索引を推奨するSQLアクセス・アドバイザ。
  • マテリアライズド・ビューを高速リフレッシュ可能にする方法、および一般的なクエリー・リライトの使用方法を提示するTUNE_MVIEW。

マテリアライズド・ビューのタイプ

集計を含むマテリアライズド・ビュー
  • 高速リフレッシュを可能にするには、SELECT構文のリストにすべてのGROUP BY列(ある場合)を含める必要がある。
  • また、集計列にCOUNT(*)およびCOUNT(column)が必要である。
  • さらに、マテリアライズド・ビュー・ログは、マテリアライズド・ビューを定義する問合せで参照されるすべての表に関して存在する必要がある。
  • 有効な集計関数は、SUM、COUNT(x)、COUNT(*)、AVG、VARIANCE、STDDEV、MIN、MAXである。また、任意のSQL値式を集計できる。
結合のみを含むマテリアライズド・ビュー
  • 結合のみを含むマテリアライズド・ビューの高速リフレッシュは、ベース表に対して任意のタイプのDML(ダイレクト・パスまたは従来型のINSERT、UPDATEまたはDELETE)を実行した後に、可能になる。
  • 結合のみを含むマテリアライズド・ビューは、ON COMMITまたはON DEMANDでリフレッシュされるように定義できる。ON COMMITの場合、リフレッシュは、マテリアライズド・ビューにある1つのディテール表上でDMLを実行するトランザクションのコミット時に実行される。
  • REFRESH FASTを指定する場合、Oracleは、問合せ定義をさらに検証して、いずれかのディテール表が変更された場合の高速リフレッシュの実行を保証する。
    • 表がPCTをサポートしていない場合、マテリアライズド・ビュー・ログがそれぞれのディテール表に対して作成されていること。また、マテリアライズド・ビューが必要な場合は、ROWID列が各マテリアライズド・ビュー・ログに存在していること。
    • すべてのディテール表のROWIDが、マテリアライズド・ビュー問合せ定義のSELECTリストにあること。
ネステッド・マテリアライズド・ビュー
  • ネステッド・マテリアライズド・ビューを使用すると、結合のみを含む1つのマテリアライズド・ビューに基づいて複数の単一表マテリアライズド・ビューを作成できる。
  • この種類の単一表集計マテリアライズド・ビューには最適化が実行され、リフレッシュが非常に効率的になる。

Materialized Viewの作成

CREATE MATERIALIZED VIEW文
CREATE MATERIALIZED VIEW cust_sales_mv
    PCTFREE 0 TABLESPACE demo
    STORAGE (INITIAL 16k NEXT 16k PCTINCREASE 0)
    PARALLEL
    BUILD IMMEDIATE
    REFRESH COMPLETE
    ENABLE QUERY REWRITE AS
    SELECT  c.cust_last_name, SUM(amount_sold) AS sum_amount_sold
    FROM customers c, sales s WHERE s.cust_id = c.cust_id
    GROUP BY c.cust_last_name;
作成方法
作成方法 説明
BUILD IMMEDIATE マテリアライズド・ビューを作成して、データを移入する。
BUILD DEFERRED マテリアライズド・ビューの定義は作成するが、データは移入しない。
クエリー・リライトの有効化
  • クエリー・リライトがデフォルトで使用可能にされている場合でも、マテリアライズド・ビューをクエリー・リライトで使用可能にするには、ENABLE QUERY REWRITE句も指定する必要がある。
  • ##blueDISABLE QUERY REWRITE##を指定した場合は、クエリー・リライトが使用不可になる。

一般的なクエリー・リライトの制限

  • 問合せにローカル表およびリモート表の両方が含まれる場合、ローカル表のみがリライトの対象になる。
  • SYSは、ディテール表もマテリアライズド・ビューも所有できない。
  • マテリアライズド・ビューのGROUP BY句に列または式を指定する場合は、その列または式をSELECT構文のリストにも指定する必要がある。
  • 集計関数は、式の最も外側でのみ使用する必要があります。つまり、AVG(AVG(x))やAVG(x)+ AVG(x)などの集計は実行できる。
  • CONNECT BY句は使用できる。
リフレッシュ・オプション

リフレッシュ・モード

  • ON COMMIT:マテリアライズド・ビューのディテール表の1つを変更したトランザクションをコミットした場合、リフレッシュが自動的に実行される。
  • ON DEMAND:ユーザーがDBMS_MVIEWパッケージに含まれている使用可能なリフレッシュ・プロシージャ(REFRESH、REFRESH_ALL_MVIEWS、REFRESH_DEPENDENT)の1つを手動で実行した場合、リフレッシュが実行される。
マテリアライズド・ビュー・ログ
  • マテリアライズド・ビューを高速リフレッシュするには、通常、マテリアライズド・ビュー・ログの定義でROWID句を指定する必要がある。
  • また、集計を含むマテリアライズド・ビューの場合は、マテリアライズド・ビューで参照される表のすべての列、INCLUDING NEW VALUES句およびSEQUENCE句を含む必要がある。
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License