1、普通視圖
數據庫中的視圖(view)是從一張或多張數據庫表查詢導出的虛擬表,反映基礎表中數據的變化,且本身不存儲數據。
2、物化視圖【materialized view】
2.1、概念: 物化視圖是查詢結果集的一份持久化存儲,所以它與普通視圖完全不同,而非常趨近於表。 可以是基礎表中部分數據的一份簡單拷貝,也可以是多表join之后產 生的結果或 其子集,或者原始數據的聚合指標等等。所以,物化視圖不會隨着基礎表的變化而變化,所以它也稱為快照(snapshot)。
如果要更新數據的話,需要用戶手動進行,如周期性執行SQL,或利用觸發器等機制。
2.2、產生物化視圖的過程就叫做“物化”(materialization)。廣義地講,物化視圖是數據庫中的預計算邏輯+顯式緩存,典型的空間換時間思路。
所以用得好的話,它可以避免對基礎表的頻繁查詢並復用結果,從而顯著提升查詢的性能。它當然也可以利用一些表的特性,如索引。
參考鏈接:
https://www.jianshu.com/p/3f385e4e7f95
Material View的主要作用
1. 實現兩個數據庫之間的數據同步,可以存在時間差。
2. 如果是遠程鏈接數據庫的場景時,提高查詢速度。
(由於查詢邏輯復雜,數據量比較大,導致每次查詢視圖的時候,查詢速度慢,效率低下)
物化視圖的刷新方式和方法
1. 刷新的方式
Fast
Complete
Fource
2. 刷新的方法
DBMS_REFRESH.Refresh
DBMS_MVIEW.Refresh
EXEC DBMS_MVIEW.refresh('BXJ_OBJECTS_MV_T1','C'); EXEC DBMS_REFRESH.refresh('REP_MVIEWGROUP');
案例創建一個物化視圖:
創建一個表: create table t(id int,name varchar); 插入數據: insert into t -> select generate_series(1,1000000),random()::VARCHAR; 創建一個:物化視圖 create materialized view mv_t as select * from t; 創建一個索引: create unique index idx_ken on mv_t(id); 查詢最大值: select max(id) from mv_t; 插入一個最大數據: insert into t values(1000001,random()); 插入后記得刷新數據:refresh
refresh materialized view mv_t;
刪除物化視圖:drop
drop materialized view mv_t;
五 、總結
1.物化視圖當前是全量刷新,暫不支持增量刷新
2.刷新參數with data是全量更新(replace)物化視圖內容,且是默認參數;with no data會清除物化視圖內容,釋放物化視圖所占的空間,並使物化視圖不可用
https://blog.csdn.net/sunbocong/article/details/77931744