1.視圖的概念
??? ? 視圖是基于一張表或多張表或另外一個視圖的邏輯表。視圖不同于表,視圖本身不包含任何數據。表是實際獨立存在的實體,是用于存儲數據的基本結構。而視圖只是一種定義,對應一個查詢語句。視圖的數據都來自于某些表,這些表被稱為基表。通過視圖來查看表,就像是從不同的角度來觀察一個 ( 或多個 ) 表。視圖可以在表能夠使用的任何地方使用,但在對視圖的操作上同表相比有些限制,特別是插入和修改操作。對視圖的操作將傳遞到基表,所以在表上定義的約束條件和觸發器在視圖上同樣起作用。
2.視圖的優點:
*?? ? 可以提高數據訪問的安全性,通過視圖往往只可以訪問數據庫中表的特定部分,限制了用戶訪問表的全部行和列。
*?? ? 簡化了對數據的查詢,隱藏了查詢的復雜性。視圖的數據來自一個復雜的查詢,用戶對視圖的檢索卻很簡單。
*?? ? 一個視圖可以檢索多張表的數據,因此用戶通過訪問一個視 圖,可完成對多個表的訪問。
*?? ? 視圖是相同數據的不同表示,通過為不同的用戶創建同一個表的不同視圖,使用戶可分別訪問同一個表的不同部分。
????? ?
3.創建視圖
創建視圖需要 CREAE VIEW 系統權限,視圖的創建語法如下:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 視圖名 [( 別名 1[ ,別名 2...])]
AS ? 子查詢
[WITH CHECK OPTION [CONSTRAINT? 約束名 ]]
[WITH READ ONLY]
其中:
OR REPLACE ? 表示替代已經存在的視圖。
FORCE 表示不管基表是否存在,創建視圖。
NOFORCE 表示只有基表存在時,才創建視圖,是默認值。
USER_VIEWS 字典中包含了視圖的定義。
?
4. 物化視圖
????? 物化視圖是一種特殊的物理表,“物化”
(Materialized)
視圖是相對普通視圖而言的。普通視圖是虛擬表,應用的局限性大,任何對視圖的查詢,
Oracle
都實際上轉換為視圖
SQL
語句的查詢。這樣對整體查詢性能的提高,并沒有實質上的好處。
????
?
物化視圖的類型
ON DEMAND
、
ON COMMIT
。二者的區別在于刷新方法的不同,
ON DEMAND
顧名思義,僅在該物化視圖“需要”被刷新了,才進行刷新
(REFRESH)
,即更新物化視圖,以保證和基表數據的一致性;而
ON COMMIT
是說,一旦基表有了
COMMIT
,即事務提交,則立刻刷新,立刻更新物化視圖,使得數據和基表一致。
物化視圖可以分為以下三種類型:包含聚集的物化視圖;只包含連接的物化視圖;嵌套物化視圖。三種物化視圖的快速刷新的限制條件有很大區別,而對于其他方面則區別不大。
?
???
?
創建物化視圖時可以指定多種選項
???*
?
創建方式(
Build Methods
):包括
BUILD IMMEDIATE
和
BUILD DEFERRED
兩種。
BUILD IMMEDIATE
是在創建物化視圖的時候就生成數據,而
BUILD DEFERRED
則在創建時不生成數據,以后根據需要在生成數據。默認為
BUILD IMMEDIATE
。
???? *
查詢重寫
(Query Rewrite)
:包括
ENABLE QUERY REWRITE
和
DISABLE QUERY REWRITE
兩種。分別指出創建的物化視圖是否支持查詢重寫。查詢重寫是指當對物化視圖的基表進行查詢時,
Oracle
會自動判斷能否通過查詢物化視圖來得到結果,如果可以,則避免了聚集或連接操作,而直接從已經計算好的物化視圖中讀取數據。默認為
DISABLE QUERY REWRITE
。
???? *
在建立物化視圖的時候可以指定
ORDER BY
語句,使生成的數據按照一定的順序進行保存。不過這個語句不會寫入物化視圖的定義中,而且對以后的刷新也無效。
???? ? *創建自動更新的物化視圖
CREATE MATERIALIZED VIEW T_TEST_MV
REFRESH FAST ON DEMAND WITH ROWID
START WITH SYSDATE NEXT SYSDATE + 30/86400
AS
SELECT * FROM t_test;
這樣,T_TEST_MV會有一個job自動更新,時間間隔為30秒。
刷新的方法有四種:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后進行的修改。COMPLETE刷新對整個物化視圖進行完全的刷新。如果選擇FORCE方式,則Oracle在刷新時會去判斷是否可以進行快速刷新,如果可以則采用FAST方式,否則采用COMPLETE的方式。NEVER指物化視圖不進行任何刷新。默認值是FORCE ON DEMAND。
?
? 物化視圖和普通視圖的區別
*普通視圖不存放數據,物化視圖存放數據
* 在使用視圖進行查詢時,是通過 View 中的 SQL 查詢原表的數據,不能提高查詢性能。在通過物化視圖進行查詢時,直接讀取物化視圖的數據,提高查詢性能。
*? 對普通視圖應用更新、刪除操作會影響原表的數據。只讀物化視圖不能進行 DML 操作。可更新物化視圖可進行 DML 操作,并且在刷新時操作會被推送回原表。可寫物化視圖可進行 DML 操作,但刷新后所有修改操作在刷新后全部丟失
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
