1. 程式人生 > 其它 >oracle 物化檢視

oracle 物化檢視

create table tastTable(
id number,
name varchar2(50)
);


insert into tastTable(Id, Name)values(1,'張三');
insert into tastTable(Id, Name)values(2,'李四');
insert into tastTable(Id, Name)values(3,'李五');
insert into tastTable(Id, Name)values(4,'李六');
insert into tastTable(Id, Name)values(5,'李七);

CREATE MATERIALIZED VIEW mv_tasttable
REFRESH FORCE --重新整理的方式
ON DEMAND --重新整理的時機
START WITH SYSDATE --重新整理開始時間,每一分鐘重新整理一次
NEXT sysdate+1/1440
AS select * from tasttable;

其中 REFRESH FORCE 還可以選擇 fast,complete兩種方式, fast 快速重新整理,意思就是增量更新,只將自上次重新整理以後對基表進行的所有操作重新整理到物化檢視中去,個人感覺這種方式限制太多,實際應用中很難適用,complete 完全重新整理,就相當於會刪除表中所有的記錄(如果是單表重新整理,可能會採用TRUNCATE的方式),然後根據物化檢視中查詢語句的定義重新生成物化檢視,還有FORCE方式,這種方式Oracle會自動判斷是否滿足快速重新整理的條件,如果滿足則進行快速重新整理,否則進行完全重新整理。

重新整理的時機,ON DEMAND還可以選擇 on commit 方式,意思是根據基表的事務提交來重新整理物化檢視,這種方式看起來很好很方便,但是我感覺如果基表一下子提交很多事物的話就不知道情況會怎麼樣了,對了不瞭解的情況還是慎用比較好,然後,ON DEMAND的方式僅在該物化檢視“需要”被重新整理了,才進行重新整理(REFRESH),即更新物化檢視,以保證和基表資料的一致性,簡而言之,需要我們去觸發更新,這裡可以直接在建立檢視的時候就設定好重新整理的時間間隔,就像我上面的例子,還有就是在資料庫建立定時任務去執行重新整理,這種比較麻煩,而且效果類似

最後,我上面的例子就是我認為比較常用的設定,目的主要是為了提高查詢的效率,業務上是允許我有重新整理間隔的,在這裡記錄一下