oracle物化視圖


物化視圖是一種特殊的物理表,“物化”(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 = '物化視圖名稱';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM