Seita developer blog

ユーザ企業に努めるアプリケーションエンジニアがプログラミング、データベース、OS、SNS、ガジェットなどを中心に備忘録変わりに書いていきます。

【Oracle】ビューとマテリアライズド・ビュー(マテビュー)について

今回は、Oracleのビューとマテリアライズド・ビュー(マテビュー)について説明したいと思います。

 

[ビューとは]

ビューとは、複数のテーブル(表)を結合し、その結果をテーブルのように見せる表現のことです。

結果をテーブルのように見せるだけなので、バックグラウンドではSELECTは走っています。

利用シーンとしては、正規化したデータを崩さずに参照しやすくするためなどに使います。

ビューとは、別の表または表の組合せの論理表現です。

引用:ビュー、順序およびシノニムの管理

 

DDLで書くとこんな感じです。

CREATE VIEW rey_view AS SELECT a.* FROM rey_tbl1 a, rey_tbl2 WHERE a.empNo = b.empNo;

 

[ビューとマテビューの違い]

マテリアライズド・ビューとは、ビューと同じく複数のテーブルを結合し、その結果をテーブルのように見せる表現のことです。

ビューとの違いは、「マテビューの場合、マテビュー自体がSELECTの結果の実データを保持しており、SELECT対象のデータが更新がかかった場合、マテビューのデータが更新される」という特徴があります。

利用シーンとしては「データ・ウェアハウス」、例えば一覧表示や件数表示用に複雑な結合が必要でSELECTにリソースを多く消費する場合などに利用されます。

マテリアライズド・ビューとは、ある一時点におけるターゲット・マスターのレプリカのことです。

引用:マテリアライズド・ビューの概要とアーキテクチャ

 

<イラストで表すと>

f:id:rey1229:20160604013904p:plain

f:id:rey1229:20160604013918p:plain

 

 [マテビューの更新のタイミングと更新方法]

更新方法としては4つあります。

実データを保持する関係上、「完全リフレッシュ(全計算)」と「高速リフレッシュ(部分計算)」があります。

<更新方法>
refresh complete:完全リフレッシュ(全データを再計算し直す。)
refresh fast:高速リフレッシュ(更新のあった箇所だけを再計算する。)
refresh force:デフォルト(高速リフレッシュ可能なら高速リフレッシュ、そうでないなら完全リフレッシュを実行する。)
never refresh:リフレッシュしない(再計算しない。手動でのリフレッシュ指示も無効。)

 

更新タイミングとしては、3つあります。

<更新タイミング>
on commit:コミット時(更新がコミットされた時点で再計算する。)
start with・next:一定間隔(指定された時刻に再計算する。)
on demand:指定時(手動で指示しない限り、再計算しない。)

 

 

<参考>

ビュー、順序およびシノニムの管理

マテリアライズド・ビューの概要とアーキテクチャ

オラクル マテリアライズドビューメモ(Hishidama's Materialized view for Oracle Memo)

 

 

 

<愛読書>