亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

留坝县| 石台县| 莱芜市| 龙山县| 曲靖市| 五华县| 从化市| 雷波县| 宝丰县| 南京市| 阿拉尔市| 娄底市| 于田县| 龙游县| 沙河市| 松潘县| 正蓝旗| 淄博市| 安多县| 宁晋县| 诏安县| 威远县| 泽普县| 河间市| 旅游| 临西县| 双城市| 阿拉善盟| 东源县| 科技| 酒泉市| 陇川县| 武穴市| 石城县| 玉田县| 南木林县| 怀仁县| 眉山市| 汤原县| 西安市| 宁波市|