ORACLE物化檢視 -循序漸進MView(四) MView建立語法參考
阿新 • • 發佈:2019-01-29
MView建立語法
MView的語法圖示,來自Oracle Database SQL Reference
- ON PREBUILD TABLE
- 將已經存在的表註冊為實體化檢視。同時還必須提供描述建立該表的查詢的 SELECT 子句。可能無法始終保證查詢的精度與表的精度匹配。為了克服此問題,應該在規範中包含 WITH REDUCED PRECISION 子句。注意:這種方法不能用於以ROWID方式建立MVIEW,因為按照ROWID方式建立的ROWID所對應的表需要包含一個隱含的ROWID列。
- Build Clause
- 建立方式,決定是否在建立MV的時候生成資料。
- BUILD IMMEDIATE(預設): 在建立實體化檢視的時候就生成資料
- BUILD DEFERRED: 在建立時不生成資料,以後在重新整理MV的時候生成資料
- Refresh
- 重新整理子句,當基表發生了DML操作後,實體化檢視何時採用哪種方式和基表進行同步
[ondemand | commit]
[startwithdate]
[nextdate]
[with {primarykey | rowid}]
]
- FAST: 採用增量重新整理,只重新整理自上次重新整理以後進行的修改
- COMPLETE: 對整個實體化檢視進行完全的重新整理
- FORCE(預設): Oracle在重新整理時會去判斷是否可以進行快速重新整理,如果可以則採用Fast方式,否則採用Complete的方式,Force選項是預設選項
- ON DEMAND(預設): 實體化檢視在使用者需要的時候進行重新整理,可以手工通過DBMS_MVIEW.REFRESH等方法來進行重新整理,也可以通過JOB定時進行重新整理
- ON COMMIT: 實體化檢視在對基表的DML操作提交的同時進行重新整理
- START WITH: 第一次重新整理時間
- NEXT: 重新整理時間間隔
(說明:指定上面兩個選項的任意一個都將會在系統中產生一個新的JOB,用來對所建立的MV進行重新整理,這個JOB可以從DBA_JOBS查到,同時刪除MV之後該JOB也會被刪除。)
- WITH PRIMARY KEY(預設): 生成主鍵實體化檢視,也就是說實體化檢視是基於表的主鍵,而不是ROWID(對應於ROWID子句)。 為了生成PRIMARY KEY子句,應該在表上定義主鍵,否則應該用基於ROWID的實體化檢視。主鍵實體化檢視允許識別實體化視圖表而不影響實體化檢視增量重新整理的可用性
- WITH ROWID: 只有一個單一的主表,不能包括下面任何一項:Distinct,聚合函式,Group by,子查詢,連線,SET操作
- Query Rewrite
- 查詢重寫,包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE兩種。分別指出建立的實體化檢視是否支援查詢重寫。查詢重寫是指當對實體化檢視的基表進行查詢時,Oracle會自動判斷能否通過查詢實體化檢視來得到結果,如果可以,則避免了聚集或連線操作,而直接從已經計算好的實體化檢視中讀取資料。主要用於DataWarehouse。
- ENABLE QUERY REWRITE:支援查詢重寫
- DISABLE QUERY REWRITE(預設):不支援查詢重寫
- WITH Clause
-
- OBJECT ID 如果是物件實體化檢視(object materialized view),則只能採用該方式
- PRIMARY KEY(預設):
- ROWID:當原表中不存在主鍵時需要採取這種方式。
- SEQUENCE
MView分類
按對MView可以進行的DML的操作分
按對MView可以進行的DML的操作可將MView分成三種
- 只讀MView:不指定FOR UPDATE引數所建立MView為只讀MView,這種MView將和原查詢的資料保持一致,不會存在有資料衝突等問題。
- 可更新MView:在建立MView的時候使用FOR UPDATE引數,同時要求將MView放在重新整理組裡面。建立的MView可以被更新修改,而且MView的修改也會在MView重新整理的時候被推到原表中。
- 可寫MView:在建立MView的時候使用FOR UPDATE引數,但是不將MView放在重新整理組裡面。這樣的MView可以被修改,但是所有的修改會在MView被重新整理的時候被重新整理掉。
安裝MView原表的型別區分
安裝MView原表的型別區可將MView分成四種
- Primary Key MView:預設情況下系統將建立Primary Key MView,這種MView需要基表存在主鍵。
- Object MView:當基表是由OF type語句所建立的表物件時建立的MView被稱為Object MView。
- ROWID MView:在下面2種情況下需要建立基於ROWID的MView:基表沒有PK或者是複合PK中只有部分列被包含在MView當中。同時也可以使用ALTER MATERIALIED VIEW mv ADD ROWID語句為現有的基於PK的MView加入ROWID列。
- 複合MView:建立在一個複合查詢上面的MView被稱為複合型MView,這種型別的MView最主要要注意的是MView是否能被快速重新整理,即快速重新整理相容性。