物化視圖

物化視圖,它是用於預先計算並保存表連線或聚集等耗時較多的操作的結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,從而快速的得到結果。

簡介

物化視圖,它是用於預先計算並保存表連線或聚集等耗時較多的操作的結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,從而快速的得到結果。物化視圖有很多方面和索引很相似:使用物化視圖的目的是為了提高查詢性能;物化視圖對套用透明,增加和刪除物化視圖不會影響應用程式中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

相關詞條

熱門詞條

聯絡我們