91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

12c 物化視圖 - 刷新方式的對比

發布時間:2020-08-12 00:18:39 來源:ITPUB博客 閱讀:133 作者:shilei1 欄目:關系型數據庫

1. 完全刷新
完全刷新的特點是將主表上的查詢結果全部寫入和物化視圖同名的基表中。當再次刷新時,先清空基表中的所有數據,再加載最新執行的查詢結果。

使用關鍵字refresh complete創建完全刷新物化視圖

create materialized view mvc_costs 
refresh complete on demand
as select promo_id,sum(unit_cost) cost from costs group by promo_id;

手工執行完全刷新命令,完全刷新的字母為C

exec dbms_mview.refresh('MVC_COSTS','C');

如果創建的物化視圖視圖中包含大量數據,可以使用關鍵字build deferred不加載數據,等數據庫不忙的時候在手工執行完全刷新的方式。
create materialized view mvn_costs
tablespace users
build deferred
refresh complete on demand
as select promo_id,sum(unit_cost) cost from costs group by promo_id;

2. 快速刷新
快速刷新也可以理解為增量刷新。增量數據由物化視圖日志來管理。物化視圖創建成功后,查詢結果已經保存在物化視圖的同名基表中。當主表產生DML操作時視圖日志會將其保存到增量基表中,等到執行快速刷新時將這部分數據同步到物化視圖基表中,并清除自身的數據。

快速刷新物化視圖需要創建日志

create materialized view log on costs with rowid,
sequence(promo_id,unit_cost) including new values;

使用關鍵字refresh fast創建快速刷新的物化視圖

create materialized view mvf_costs
segment creation immediate
refresh fast with rowid on demand
as select promo_id,sum(unit_cost) cost from costs group by promo_id;

手工執行完全刷新命令,完全刷新的字母為F
exec dbms_mview.refresh('MVF_COSTS','F');


3. 提交時刷新
刷新是一種觸發條件,可以手工觸發,也可以自動觸發。所謂手工觸發就是執行dbms_mview.refresh包來觸發刷新事件。在應用程序中不一定需要人為的執行這條命令,而是當程序中滿足某些條件后向數據庫發去這個命令來完成刷新。另一種觸發方式是自動刷新。當主表DML操作提交后就觸發刷新事件,從而達到主表和物化視圖實時同步的效果。這種方式有些像stream、Oracle GodenGate、或者是DataGuard的邏輯復制。

提交刷新用起來很酷,但是也有需要注意的地方
1. 主表提交時基表也提交,系統開銷增大。在繁忙的OLTP系統中會影響一部分性能。如果物化視圖更新出錯,主表也無法提交事務。
2. 主表和物化視圖必須在同一個數據庫中
3. 無法在基表上執行分布式事務
4. 不支持含有對象類型或Oracle補充支持類型的物化視圖

下面看看提交時刷新物化視圖的創建方法
create materialized view log on costs with rowid;

create materialized view mvfc_costs
refresh on commit
as select promo_id,sum(unit_cost) cost from costs group by promo_id


查看當前物化視圖中的數據
select * from mvfc_costs;

PROMO_ID   COST
---------- ----------
999        9313900.88
350        242949.08
351        258268

像主表添加2000條數據
insert into costs select * from costs where rownum<2001
2000 rows created.
SH@pdb1 > commit;
Commit complete.

再次查看物化視圖數據已經變化,刷新成功
SH@pdb1 > select * from mvfc_costs;

PROMO_ID   COST
---------- ----------
999        9607463.83
350        242949.08
351        258268

4. 從不刷新
看上去像個沒用的東西,但是存在就有存在的道理。當我們需要保存一份快照,正好用的這個功能。當然通過create table as select的方式也可以實現,物化視圖的靈活的地方是可以快照,也可以解除快照變為可刷新的物化視圖。
來看看例子:
create materialized view mvs_costs
never refresh
as select promo_id,sum(unit_cost) cost from costs group by promo_id

查看視圖描述信息
select mview_name,refresh_method,refresh_mode,build_mode,fast_refreshable
from user_mviews
where mview_name='MVS_COSTS'

MVIEW_NAME           REFRESH_ REFRES BUILD_MOD FAST_REFRESHABLE
-------------------- -------- ------ --------- ------------------
MVS_COSTS            NEVER    NEVER  IMMEDIATE DIRLOAD_LIMITEDDML

使用下面的sql語句可以將從不刷新的物化視圖改變為完全刷新方式

SH@pdb1 >
alter materialized view mvs_costs
refresh on demand complete;

Materialized view altered.

狀態從never修改為complete
SH@pdb1 >
select mview_name,refresh_method,refresh_mode,build_mode,fast_refreshable
from user_mviews
where mview_name='MVS_COSTS';


MVIEW_NAME           REFRESH_ REFRES BUILD_MOD FAST_REFRESHABLE
-------------------- -------- ------ --------- ------------------
MVS_COSTS            COMPLETE DEMAND IMMEDIATE DIRLOAD_LIMITEDDML

橫向對比各種物化視圖的刷新方式會發現有些先進、有些落后。其實不是這樣的,每個功能都有適合它的使用場景。最適合的才是最好的。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉水县| 思南县| 康乐县| 双柏县| 桐梓县| 安福县| 巴中市| 浦江县| 盐津县| 广灵县| 龙陵县| 东乌珠穆沁旗| 西乌| 恩平市| 巴楚县| 敦化市| 海口市| 玉树县| 土默特左旗| 三亚市| 怀集县| 黔江区| 米易县| 蚌埠市| 辽宁省| 革吉县| 张家界市| 宝丰县| 临朐县| 双桥区| 新乡县| 定襄县| 尼玛县| 合肥市| 曲水县| 钟祥市| 奇台县| 十堰市| 东乡族自治县| 犍为县| 寿阳县|