物化視圖是一種特殊的物理表,“物化”(Materialized)視圖是相對普通視圖而言的。普通視圖是虛擬表,應用的局限性大,任何對視圖的查詢,Oracle都實際上轉換為視圖SQL語句的查詢。這樣對整體查詢性能的提高,並沒有實質上的好處。
創建物化視圖需要的權限:
grant create materialized view to user_name;
創建語句:
create materialized view mv_name [選項n] as select * from table_name;
[選項1]:BUILD [immediate,deferred] 是否在創建視圖時生成數據,默認生成、deferred為不生成數據,需要的時候生成
[選項2]:refresh [fast|complete|force|never] fast是增量刷新,或者叫快速刷新;complete為全表刷新;force為如果增量刷新可以使用則使用增量刷新,否則全表刷新;never則是不進行刷新(不使用)
[選項3]:on [demand,commit] 即手工刷新和提交時刷新
[選項4]:start with 通知數據庫完成從主表到本地表第一次復制的時間
[選項5]:next 說明了刷新的時間間隔,下次刷新的時間=上次執行完成的時間+時間間隔
例子1:
create materialized view V_AB refresh force on commit as select * from a,b where a.id=b.id
分析:創建一個物化視圖來存儲a,b兩個表的數據,force表示盡量使用增量刷新,但是這種寫法只會進行全表刷新。commit表示自動刷新,也就是說,當我們增刪改a,b表后進行commit操作后,我們的物化視圖也會同時進行數據的刷新。如果想要使用增量刷新來提高效率,請看下面的例子
例子2:
首先要建立與原表rowid相關的物化視圖:
create materialized view log on A with rowid;
create materialized view log on B with rowid;
再創建真正的物化視圖
create materialized view V_AB refresh fast on demand start with sysdate next sysdate+1/1440 as
select a.rowid as arowid,b.rowid as browid, (其余字段) from a,b where a.id=b.id;
這里使用demand代表手動刷新,start with代表開始復制的時間,next說明間隔一分鍾后刷新,也就是說,當我們增刪改a,b表后進行commit操作后,我們的物化視圖再經過1分鍾后會進行數據的刷新。
查詢已經建立的物化視圖語句:
SELECT * FROM user_mviews WHERE mview_name = '物化視圖名稱';