PGSQL數據庫里物化視圖【materialized view】


1、普通視圖

     數據庫中的視圖(view)是從一張或多張數據庫表查詢導出的虛擬表,反映基礎表中數據的變化,且本身不存儲數據。

 

 

 

 

2、物化視圖【materialized view】

    2.1、概念: 物化視圖是查詢結果集的一份持久化存儲,所以它與普通視圖完全不同,而非常趨近於表。 可以是基礎表中部分數據的一份簡單拷貝,也可以是多表join之后產               生的結果或        其子集,或者原始數據的聚合指標等等。所以,物化視圖不會隨着基礎表的變化而變化,所以它也稱為快照(snapshot)。

             如果要更新數據的話,需要用戶手動進行,如周期性執行SQL,或利用觸發器等機制。
 
     2.2、產生物化視圖的過程就叫做“物化”(materialization)。廣義地講,物化視圖是數據庫中的預計算邏輯+顯式緩存,典型的空間換時間思路。
             所以用得好的話,它可以避免對基礎表的頻繁查詢並復用結果,從而顯著提升查詢的性能。它當然也可以利用一些表的特性,如索引。


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://www.jianshu.com/p/3f385e4e7f95
                  https://blog.csdn.net/sunbocong/article/details/77931744


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM