物化試圖

 

         視圖是數據庫系統中的一個比較簡單的概念,它又被稱爲續表。之所以稱它爲虛表,是因爲它不是存儲的實際的數據,而是存儲的得到該視圖的查詢語句。如果查詢的定義包含很複雜的表連接、集合函數等等運算內容是,獲取視圖內容會變得很慢。對這個問題,在現代的數據庫管理系統中,都採用了一種空間換時間的解決辦法-物化視圖。從這個名字都大致可以猜出他的定義。他是一個實際存儲數據的視圖,不再是原來所說的一個虛表。過去常常以一個基表代替視圖,用觸發器維護新基表於源表的一致性。在Oracle和SQL Server中這種技術被稱爲物化視圖,而在DB2中稱爲實例化查詢表。
 在Oracle中,物化試圖的前身是概要表管理和快照功能。物化視圖的主要特性是:當基本表中的數據變化時,物化視圖中的數據也會相應更新。物化視圖中的數據也可以被更改,且改動能反映到基表中。物化視圖爲查詢優化器提供了更好的查詢路徑。
要保持物化視圖存儲的數據爲最新數據,需要有同步機制。Oracle提供了三種方式來維護同步:完全刷新(“refresh” complete)、增量刷新(“refresh” fast)、部分刷新(“refresh” force)。它們都可以在創建物化視圖的時候指定。完全刷新指當要同步數據時,重新生成整個視圖。增量刷新是僅將基本表已經修改的數據行更新到物化視圖中。部分刷新可以指DBMS優先選擇增量刷新,否則用完全刷新。除了刷新方式以外,數據庫管理系統還要選擇刷新的時間:刷新的時間可以是事務提交的時候刷新、根據需要刷新或者是指定刷新間隔時間。
 在Oracle中創建物化視圖的命令如下:
 CREATE MATERIALIZED VIEW view_name
 build immediate “refresh” force on demand for update enable query rewrite
 AS select * from temp_table
 build immediate “refresh” force指明瞭物化視圖的更新方式,on demand for update指明瞭物化視圖更新的時間。
 物化視圖的優點:減少磁盤I/O、減少CPU消耗、加快響應時間。
 物化視圖的缺點:可能需要更多的磁盤空間、數據同步給系統帶來負擔。

         例如:

         主系統創建物化視圖的日誌:create materialized view log on SEXPORTPDF with primary key, rowid, sequence including new values;

         網上服務創建視圖  :create materialized view MV_SEXPORTMANIFEST
                                                                                   refresh fast on demand
                                                                                       start with to_date('19-07-2011 16:21:31', 'dd-mm-yyyy hh24:mi:ss') next /*1:Mins*/ sysdate + 1/(60*24)
                                                                             as
                                                                                select    *      from SEXPORTMANIFEST @LNK_HY3UAT;

   

        單表刷新:EXEC dbms_mview.refresh('MV_SEXPORTMANIFEST')

         刷新組: exec DBMS_REFRESH.MAKE(name => 'mview_refresh_group_FF',list => '',next_date => SYSDATE, interval => '/*1:Mins*/ sysdate + 1/     (60*24)',implicit_destroy => FALSE,lax => FALSE,job => 0,rollback_seg => NULL,push_deferred_rpc => FALSE,refresh_after_errors => TRUE,purge_option => NULL,parallelism => NULL,heap_size => NULL);
);
          exec dbms_refresh.add(name => 'mview_refresh_group_FF', list => 'MV_SEXPORTMANIFEST');

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