普通视图和物化视图区别
物化視圖是一種特殊的物理表,“物化”(Materialized)視圖是相對普通視圖而言的。普通視圖是虛擬表,應用的局限性大,任何對視圖的查詢,Oracle都實際上轉換為視圖SQL語句的查詢。這樣對整體查詢性能的提高,并沒有實質上的好處。
1、物化視圖的類型:ON DEMAND、ON COMMIT
二 者的區別在于刷新方法的不同,ON DEMAND顧名思義,僅在該物化視圖“需要”被刷新了,才進行刷新(REFRESH),即更新物化視圖,以保證和基表數據的一致性;而ON COMMIT是說,一旦基表有了COMMIT,即事務提交,則立刻刷新,立刻更新物化視圖,使得數據和基表一致。
2、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來調用相同的存儲過程或包,加以實現。
ON DEMAND物化視圖的特性及其和ON COMMIT物化視圖的區別,即前者不刷新(手工或自動)就不更新物化視圖,而后者不刷新也會更新物化視圖,——只要基表發生了COMMIT。
3、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
一:物化視圖:在查詢時直接讀出物化視圖中的數據。
??? 普通視圖:在查詢時需要在查詢中嵌套個子查詢然后去訪問原表。
二:物化視圖:不可以更新,刪除,修改等操作,只能夠查詢。然后他分為ON DEMAND物化視圖和ON DEMAND物化視圖
??? ON DEMAND物化視圖:需要手動更新數據,這樣才能保證它和原表的數據一致。
??? ON DEMAND物化視圖:一旦原表中有數據commit馬上更新數據。
??? 普通視圖:可以更新,刪除,修改等操作,但是這些操作將直接反應在原表中。
總結
以上是生活随笔為你收集整理的普通视图和物化视图区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天下之至柔驰骋天下之至坚体现矛盾双方相互
- 下一篇: Hashtable与Dictionary