MATERIALIZED VIEW

轉自新浪博客


       Oracle的實體化視圖提供了強大的功能,可以用在不同的環境中,實體化視圖和表一樣可以直接進行查詢。實體化視圖可以基於分區表,實體化視圖本身也可以分區。

 

        物化視圖是包括一個查詢結果的數據庫對像(由系統實現定期刷新數據),物化視圖不是在使用時纔讀取,而是預先計算並保存表連接或聚集等耗時較多的操作結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,大大提高了讀取速度,特別適用抽取大數據量表某些信息以及數據鏈連接表使用。

        實體化視圖還用於複製、移動計算,遠程同步等方面。物化視圖還可以進行遠程數據的的本地複製,此時的物化視圖存儲也可以稱爲快照。可是用於實施數據庫間的同步。通常情況下,物化視圖用於複製的時候爲“主表”,而在運用於數據倉庫時稱爲“明細表”。 在數據倉庫中,還經常使用查詢重寫(query rewrite)機制,這樣不需要修改原有的查詢語句,Oracle會自動選擇合適的實體化視圖進行查詢,完全對應用透明。實體化視圖和表一樣可以直接進行查詢。

        

        實體化視圖有很多方面和索引很相似:使用實體化視圖的目的是爲了提高查詢性能;實體化視圖對應用透明,增加和刪除實體化視圖不會影響應用程序中SQL語句的正確性和有效性;實體化視圖需要佔用存儲空間;當基表發生變化時,實體化視圖也應當刷新。 

        materialized view 同snapshot是同一個概念。但同view是不一樣的: 
       1)物化視圖是存儲數據的視圖,存儲了基礎表的全部或者一部分數據,主要用作sql語句的優化,查詢物化視圖比查詢表中的數據速度要快; 
       2)MV是自動刷新或者手動刷新的,View不用刷新; 
       3) MV也可以直接update,但是不影響base table,對View的update反映到base table上; 
       4)MV主要用於遠程數據訪問,mv中的數據需要佔用磁盤空間,view中不保存數據 

 

使用語法:

CREATE MATERIALIZED VIEW XX

  REFRESH  [[fast | complete | force] 
         [on demand | commit] 
         [start with date] 
         [next date] 
         [with {primary key | rowid}] 
       ]

      [ENABLE | DISABLE] QUERY REWRITE

 

       Refresh 刷新子句:
       描述:當基表發生了DML操作後,實體化視圖何時採用哪種方式和基表進行同步 
       取值:FAST—— 採用增量刷新,只刷新自上次刷新以後進行的修改 
                 COMPLETE ——對整個實體化視圖進行完全的刷新 
                 FORCE(默認) ——Oracle在刷新時會去判斷是否可以進行快速刷新,如果可以則採用Fast方式,否則採用Complete的方式,Force選項是默認選項 
                 ON DEMAND(默認) ——實體化視圖在用戶需要的時候進行刷新,可以手工通過DBMS_MVIEW.REFRESH等方法來進行刷新,也可以通過JOB定時進行刷新 
                 ON COMMIT 實體化視圖在對基表的DML操作提交的同時進行刷新 

        START WITH——第一次刷新時間 
        NEXT——刷新時間間隔 
        WITH PRIMARY KEY(默認) ——生成主鍵實體化視圖,也就是說實體化視圖是基於表的主鍵,而不是ROWID(對應於ROWID子句)。 爲了生成PRIMARY KEY子句,應該在表上定義主鍵,否則應該用基於ROWID的實體化視圖。主鍵實體化視圖允許識別實體化視圖表而不影響實體化視圖增量刷新的可用性 

 

        REWRITE 字句:包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE兩種。

        分別指出創建的實體化視圖是否支持查詢重寫。查詢重寫是指當對實體化視圖的基表進行查詢時,Oracle會自動判斷能否通過查詢實體化視圖來得到結果,如果可以,則避免了聚集或連接操作,而直接從已經計算好的實體化視圖中讀取數據。默認 DISABLE QUERY REWRITE


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章