oracle物化視圖的通常用法

oracle物化視圖的通常用法數據庫

     物化視圖是一種特殊的物理表,「物化」(Materialized)視圖是相對普通視圖而言的。普通視圖是虛擬表,應用的侷限性大,任何對視圖的查詢,Oracle都實際上轉換爲視圖SQL語句的查詢。這樣對總體查詢性能的提升,並無實質上的好處。oracle

     一、物化視圖的類型:ON DEMAND、ON COMMIT 兩者的區別在於刷新方法的不一樣,ON DEMAND顧名思義,僅在該物化視圖「須要」被刷新了,才進行刷新(REFRESH),即更新物化視圖,以保證和基表數據的一致性;而ON COMMIT是說,一旦基表有了COMMIT,即事務提交,則馬上刷新,馬上更新物化視圖,使得數據和基表一致。 工具

     二、ON DEMAND物化視圖 物化視圖的建立自己是很複雜和須要優化參數設置的,特別是針對大型生產數據庫系統而言。但Oracle容許以這種最簡單的,相似於普通視圖的方式來作,因此不可避免的會涉及到默認值問題。也就是說Oracle給物化視圖的重要定義參數的默認值處理是咱們須要特別注意的。 物化視圖的特色:性能

     (1) 物化視圖在某種意義上說就是一個物理表(並且不只僅是一個物理表),這經過其能夠被user_tables查詢出來,而獲得佐證; 優化

     (2) 物化視圖也是一種段(segment),因此其有本身的物理存儲屬性;索引

     (3) 物化視圖會佔用數據庫磁盤空間,這點從user_segment的查詢結果,能夠獲得佐證;事務

     建立語句:create materialized view mv_name as select * from table_name  默認狀況下,若是沒指定刷新方法和刷新模式,則Oracle默認爲FORCE和DEMAND。同步

     物化視圖的數據怎麼隨着基表而更新? Oracle提供了兩種方式,手工刷新和自動刷新,默認爲手工刷新。也就是說,經過咱們手工的執行某個Oracle提供的系統級存儲過程或包,來保證物化視圖與基表數據一致性。這是最基本的刷新辦法了。自動刷新,其實也就是Oracle會創建一個job,經過這個job來調用相同的存儲過程或包,加以實現。 it

     ON DEMAND物化視圖的特性及其和ON COMMIT物化視圖的區別,即前者不刷新(手工或自動)就不更新物化視圖,然後者不刷新也會更新物化視圖,——只要基表發生了COMMIT。 table

     建立定時刷新的物化視圖:create materialized view mv_name refresh force on demand start with sysdate next sysdate+1 (指定物化視圖天天刷新一次) 上述建立的物化視圖天天刷新,可是沒有指定刷新時間,若是要指定刷新時間(好比天天晚上10:00定時刷新一次):create materialized view mv_name refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss')

     三、ON COMMIT物化視圖 ON COMMIT物化視圖的建立,和上面建立ON DEMAND的物化視圖區別不大。由於ON DEMAND是默認的,因此ON COMMIT物化視圖,須要再增長個參數便可。 須要注意的是,沒法在定義時僅指定ON COMMIT,還得附帶個參數才行。 建立ON COMMIT物化視圖:create materialized view mv_name refresh force on commit as select * from table_name 備註:實際建立過程當中,基表須要有主鍵約束,不然會報錯(ORA-12014)

     四、物化視圖的刷新 刷新(Refresh):指當基表發生了DML操做後,物化視圖什麼時候採用哪一種方式和基表進行同步。刷新的模式有兩種:ON DEMAND和ON COMMIT。(如上所述) 刷新的方法有四種:FAST、COMPLETE、FORCE和NEVER。FAST刷新採用增量刷新,只刷新自上次刷新之後進行的修改。COMPLETE刷新對整個物化視圖進行徹底的刷新。若是選擇FORCE方式,則Oracle在刷新時會去判斷是否能夠進行快速刷新,若是能夠則採用FAST方式,不然採用COMPLETE的方式。NEVER指物化視圖不進行任何刷新。 對於已經建立好的物化視圖,能夠修改其刷新方式,好比把物化視圖mv_name的刷新方式修改成天天晚上10點刷新一次:alter materialized view mv_name refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss')

     五、物化視圖具備表同樣的特徵,因此能夠像對錶同樣,咱們能夠爲它建立索引,建立方法和對錶同樣。

     六、物化視圖的刪除: 雖然物化視圖是和表一塊兒管理的,可是在常用的PLSQL工具中,並不能用刪除表的方式來刪除(在表上右鍵選擇‘drop’並不能刪除物化視圖),可使用語句來實現:drop materialized view mv_name

相關文章
相關標籤/搜索