物化視圖,它是用於預先計算並儲存表串連或聚集等耗時較多的操作的結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,而從快速的得到結果。物化視圖有很多方面和索引很相似:使用物化視圖的目的是為了提高查詢效能;物化視圖對應用透明,增加和刪除物化視圖不會影響應用程式中SQL 陳述式的正確性和有效性;物化視圖需要佔用儲存空間;當基表發生變化時,物化視圖也應當重新整理。 其中物化視圖有三種:聚集物化視圖、包含串連物化視圖、嵌套物化視圖。但三種物化視圖的快速重新整理的限制條件有很大區別,而其他方面則區別不大。建立物化視圖時可以指定多種選項,主要選項如下: 1、建立方式(Build Methods):Build Immediate 和Build Deferred兩種。Build Immediate 是在建立物化視圖的時候就產生資料,而Build Deferred則在建立時不產生資料,以後根據需要在產生資料。預設為Build Immediate 。 2、查詢重寫(Query Rewrite):Enable Query Rewrite和Disable Query Rewrite兩種。分別指出建立的物化視圖是否支援查詢重寫。查詢重寫是指當對物化視圖的基表進行查詢時,Oracle會自動判斷能否通過查詢物化視圖來得到結果,如果可以,則避免了聚集或串連操作,而直接從已經計算好的物化視圖中讀取資料。預設為Disable Query Rewrite。 3、重新整理(Refresh):指當基表發生了DML操作後,物化視圖何時採用哪種方式和基表進行同步。重新整理的模式有兩種:On Demand和On Commit。On Demand指物化視圖在使用者需要的時候進行重新整理,可以手工通過DBMS_MVIEW.REFRESH等方法來進行重新整理,也可以通過JOB定時進行重新整理。On Commit指物化視圖在對基表的DML操作提交的同時進行重新整理。重新整理的方法有四種:Fast 、Complete 、Force和Never。FAST重新整理採用增量重新整理,只重新整理自上次重新整理以後進行的修改。Complete 重新整理對整個物化視圖進行完全的重新整理。如果選擇Force方式,則Oracle在重新整理時會去判斷是否可以進行快速重新整理,如果可以則採用FAST方式,否則採用Complete 的方式。Never指物化視圖不進行任何重新整理。預設值是Force On Demand。 在建立物化視圖的時候可以指定Order by 語句,使產生的資料按照一定的順序進行儲存。不過這個語句不會寫入物化視圖的定義中,而且對以後的重新整理也無效。 4、物化視圖日誌:如果需要進行快速重新整理,則需要建立物化視圖日誌。物化視圖日誌根據不同物化視圖的快速重新整理的需要,可以建立為RowID或Primary Key類型的。還可以選擇是否包括Sequence、Including New Values以及指定列的列表。 可以指明On PreBuild Table語句將物化視圖建立在一個已經存在的表上。這種情況下,物化視圖和表必須同名。當刪除物化視圖時,不會刪除同名的表。這種物化視圖的查詢重寫要求參數Query_Rewrite_integerity必須設定為 trusted或者stale_tolerated。 5、物化視圖可以進行分區。而且基於分區的物化視圖可以支援分區變化跟蹤(PCT)。具有這種特性的物化視圖,當基表進行了分區維護操作後,仍然可以進行快速重新整理操作。對於聚集物化視圖,可以在Group by 列表中使用Cube或RollUp,來建立不同等級的聚集物化視圖。 樣本1: create materialized view MV_ DOP_TEST refresh force on demand as select dsso.dop_id, soo.work_center_no, soo.operation_description from SHOP_ORDER_OPERATION SOO, DOP_SUPPLY_SHOP_ORD DSSO where soo.order_no=dsso.order_no and soo.release_no=dsso.release_no and soo.sequence_no=dsso.sequence_no; ---其中建立與刪除物化視圖與其表或視圖DDL一樣: DROP materialized view log on materialized_view_log_name ; 建立物化視圖時建立儲存的日誌空間(儲存物化視圖的對象的改變資訊) CREATE MATERIALIZED VIEW LOG ON Dop_Supply_Shop_Ord_Tab --(基表名) tablespace ifsapp_DATA --日誌儲存在特定的資料表空間 WITH ROWID ; drop materialized view MV_materialized_view_name ; 樣本2: create materialized view MV_DOP_TEST TABLESPACE ifsapp_DATA --儲存資料表空間 BUILD DEFERRED --延遲重新整理不立即重新整理,此建立初始視圖一般沒資料 refresh force --如果可以快速重新整理則進行快速重新整理,否則完全重新整理 with rowid --根據rowid重新整理(預設是主鍵) On demand --按照指定方式重新整理 start with to_date('2008-12-11 13:20:51','YYYY-MM-DD HH24:MI:SS') next sysdate+1/48 as select dsso.dop_id, soo.work_center_no, soo.operation_description from SHOP_ORDER_OPERATION SOO, DOP_SUPPLY_SHOP_ORD DSSO where soo.order_no=dsso.order_no and soo.release_no=dsso.release_no and soo.sequence_no=dsso.sequence_no
------------------------------------------------------------------------------------------------------------------------
create materialized view MV_TEST_1
refresh force on commit--提交時同步重新整理,如果是demand則是手動命令重新整理
as
select t.int_agid,sum(t.int_fyp)
from agicomphist t
group by t.int_agid;
------------------------------------------------------------------------------------------------------------------------