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

マテリアライズド・ビューとは、ひとつ以上の表(又はビュー、のマテリアライズド・ビュー)を問い合わせた結果を含むスキーマオブジェクトである。マテリアライズド・ビューの基となる表のことをマスター表と呼ぶ。参照を行なうたびに実表を問い合わせるビューと異なり、マスター表への問い合わせ結果を含んでいるため、参照を高速に行なえる。ただし、更新は遅くなる。

目次

  1. マテリアライズド・ビューとビューの違い
  2. マテリアライズド・ビューをリフレッシュする
  3. SQL
    1. CREATE MATERIALIZED VIEW
    2. ALTER MATERIALIZED VIEW
    3. DROP MATERIALIZED VIEW
  4. システム権限
    1. CREATE MATERIALIZED VIEW
    2. CREATE ANY MATERIALIZED VIEW
    3. ALTER ANY MATERIALIZED VIEW
    4. DROP ANY MATERIALIZED VIEW
    5. CREATE TABLE
    6. CREATE ANY TABLE
    7. SELECT ANY TABLE
  5. データディクショナリ・ビュー
    1. ALL_MVIEWS
    2. DBA_MVIEWS
    3. USER_MVIEWS
  6. マテリアライズド・ビュー・ログ

マテリアライズド・ビューとビューの違い

ビューは表(テーブル)の問い合わせ結果であり、実体は表です。マテリアライズド・ビューは、問い合わせ結果を物理的に保持した実体があります。

表、ビュー及びマテリアライズド・ビューの違い
操作 ビュー マテリアライズド・ビュー
SELECT
INSERT ✓(制限あり)
UPDATE ✓(制限あり)
DELETE ✓(制限あり)
主キーの作成
インデックスの作成

マテリアライズド・ビューをリフレッシュする

マテリアライズド・ビューを手動でリフレッシュするには、SQL*PlusのEXECUTEコマンドでDBMS_MVIEWパッケージのREFRESHプロシージャを実行する。

EXECUTE DBMS_MVIEW.REFRESH(name)
EXECUTE DBMS_MVIEW.REFRESH(name, method)
name
リフレッシュするマテリアライズド・ビューを指定する。
method
リフレッシュ方法を指定する。
リフレッシュ方法
方法 説明
c 完全リフレッシュ
f 高速リフレッシュ
? 強制リフレッシュ

マテリアライズド・ビューの元となるマスター・マテリアライズド・ビューを DROP MATERIALIZED VIEW で削除すると、マテリアライズド・ビューのリフレッシュはエラーになる。 マスター・マテリアライズド・ビューを一度削除すると、CREATE MATERIALIZED VIEW で同じ名前のマスター・マテリアライズド・ビューを作成しても、マテリアライズド・ビューのリフレッシュはエラーになる。

マテリアライズド・ビューを手動でリフレッシュする例を示す。

SQL> EXEC DBMS_MVIEW.REFRESH('mview1', 'c');

SQL

マテリアライズド・ビューを操作するSQL文の一覧を以下に示す。

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW とは、マテリアライズド・ビューを作成するSQL文である。

ALTER MATERIALIZED VIEW

ALTER MATERIALIZED VIEW とは、マテリアライズド・ビューを変更するSQL文である。

DROP MATERIALIZED VIEW

DROP MATERIALIZED VIEW とは、マテリアライズド・ビューを削除するSQL文である。

システム権限

マテリアライズド・ビューを操作するのに必要なシステム権限の一覧を以下に示す。

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW は、自分のスキーマ内にマテリアライズドビューを作成、変更、削除できるシステム権限である。

CREATE ANY MATERIALIZED VIEW

CREATE ANY MATERIALIZED VIEW は、任意のスキーマ内にマテリアライズドビューを作成できるシステム権限である。

ALTER ANY MATERIALIZED VIEW

ALTER ANY MATERIALIZED VIEW は、任意のスキーマ内にあるマテリアライズドビューを変更できるシステム権限である。

DROP ANY MATERIALIZED VIEW

DROP ANY MATERIALIZED VIEW は、任意のスキーマ内にあるマテリアライズドビューを削除できるシステム権限である。

CREATE TABLE

CREATE TABLE は、自分のスキーマ内に表(テーブル)を作成、変更、削除できるシステム権限である。マテリアライズド・ビューを作成するには、CREATE TABLE または CREATE ANY TABLE いずれかのテーブル作成権限が必要である。

CREATE ANY TABLE

CREATE ANY TABLE は、任意のスキーマ内に表(テーブル)を作成、変更、削除できるシステム権限である。マテリアライズド・ビューを作成するには、CREATE TABLE または CREATE ANY TABLE いずれかのテーブル作成権限が必要である。

SELECT ANY TABLE

SELECT ANY TABLE は、任意のスキーマ内にある表(テーブル)を問い合わせることができるシステム権限である。つまり、他のユーザのスキーマ内にあるテーブルをマスター表にできる。

データディクショナリ・ビュー

マテリアライズド・ビューに関するデータ・ディクショナリ・ビューの一覧を以下に示す。

ALL_MVIEWS

ALL_MVIEWS は、現在のユーザがアクセスできるマテリアライズド・ビューを示すデータ・ディクショナリ・ビューである。

DBA_MVIEWS

DBA_MVIEWS は、データベース内すべてのマテリアライズド・ビューを示すデータ・ディクショナリ・ビューである。

USER_MVIEWS

USER_MVIEWS は、現在のユーザが所有するマテリアライズド・ビューを示すデータ・ディクショナリ・ビューである。

マテリアライズド・ビューを定義する問い合わせを確認する例を示す。

SQL> SELECT QUERY FROM USER_MVIEWS WHERE MVIEW_NAME = 'example';

マテリアライズド・ビュー・ログ

マテリアライズド・ビュー・ログとは、マテリアライズド・ビューの基となるマスター表への変更を格納するスキーマオブジェクトである。マテリアライズド・ビュー・ログがある場合、マテリアライズド・ビュー・ログを使用してマテリアライズド・ビューがリフレッシュされる。これを増分リフレッシュ又は高速リフレッシュと呼ぶ。

マテリアライズド・ビューを高速リフレッシュするためには、マテリアライズド・ビュー・ログを作成する必要がある。

SQL

マテリアライズド・ビュー・ログを操作するSQL文の一覧を次に示す。

CREATE MATERIALIZED VIEW LOG
マテリアライズド・ビュー・ログを作成する。
ALTER MATERIALIZED VIEW LOG
マテリアライズド・ビュー・ログを変更する。
DROP MATERIALIZED VIEW LOG
マテリアライズド・ビュー・ログを削除する。