物化檢視詳解--介紹、建立方法、例子
一、 關於物化檢視日誌:
查詢物化檢視日誌檔案格式:desc mlog$_lzwmvtest;
建立物化檢視時預設指定物化檢視中存在主鍵,如果不指定,那麼建立的物化檢視日誌檔案的基表必須存在主鍵,否則會報錯
Demo:對一個表test
建立日誌:create materialized view log on test;
那麼會報:表'LZWMVTEST'
這種情況下,就必須指定日誌檔案結構
比如:create materialized view log on test with rowid(具體的針對日誌內容方面的在另外一個專題裡說明,這裡就簡述到此)
二、 關於生成資料和重新整理:
1>生成資料
兩大選項:build immediate build deferred
Build immediate:在建立物化檢視的同時根據主表生成資料
Bulid deferred:在建立物化檢視的同時,在物化檢視內不生成資料,如果此時沒有生成資料,以後可以採取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’)
2>關於重新整理
² 重新整理方式:complete fast force
Complete :完全重新整理整個物化檢視,相當於重新生成物化檢視,此時即時增量重新整理可用也全量重新整理
Ø Fast:當有資料更新時依照相應的規則對物化檢視進行更新(此時必須建立物化檢視日誌(物化檢視日誌記錄了資料更新的日誌),關於日誌的說明,參照“物化檢視日誌檔案介紹”)
Ø Force:當增量重新整理可用則增量重新整理,當增量重新整理不可用,則全量重新整理(此項為預設選項)
不過從實際情況出發,應該儘量不使用預設選項,可以考慮使用增量重新整理,對大表特別有效,大表全量更新速度是非常慢的,特別是在存在索引的情況下(在建立物化檢視語句中,可能某些限制查詢的條件,導致了增量重新整理無法使用,這個是需要注意的,具體是哪類語句導致fast
² 重新整理時間:on demand on commit start with/ next
On demand:在需要重新整理時進行重新整理(人工判斷)
On commit:在基表上有提交操作時,進行更新
Start with:指定首次重新整理的時間(一般指定的是當前時間,不過也可以在建立物化檢視時不生成資料,則可以考慮在指定的時間重新整理,從而生成資料)
Next:重新整理的週期時間
三、 基於主鍵的物化檢視和ROWID的物化檢視的說明
建立物化檢視日誌時,指定了記錄更新的原則即with 後面的primary 或者rowid 或者object id等等,後面,預設是以primary key為記錄更新,在物化檢視內也是以此為更新的原則。
例如:1、如果日誌內使用的是primary key 則在建立物化檢視時指定rowid來更新,則會報ORA-12032: 不能使用 "TEST" 上實體化檢視日誌中的 rowid 列
2、如過日誌內使用的是rowid 則在建立物化檢視時指定primary或者預設指定,則會報ORA-23415: "GIS"."LZWMV" 的實體化檢視日誌不記錄主鍵
四、 關於物化檢視存放的的表空間
直接在建立物化檢視時指定日誌存放的表空間和物化檢視的表空間。
例子:create materialized view MV_TEST tablespace test ----表空間名稱
五、 關於查詢重寫和更新
在建立查詢重寫時,基表中必須有主鍵約束,視圖裡是無法建立主鍵的,不過其繼承了基表的主鍵約束。(關於檢視的建立的一些技巧有待總結……)下面給個例子
Create materialized view MV_TEST
Refresh fast ----前提是必須建立基表日誌,可以忽略該項
Enable query rewrite ----前提是基表上必須存在主鍵約束
As
Select * from TEST; ----物化檢視資料生成
六、 關於建立物化檢視的例子:
1、 使用增量重新整理的物化檢視的寫法
建立物化檢視日誌,必須建立日誌
Create materialized view log on TEST ----TEST為表名
----注:(TEST為表名或者檢視名,關於檢視上建立物化檢視,見基於檢視的物化檢視
----建立物化檢視語句:
Create materialized view MV_TEST
----MVTEST為物化檢視名
Build immediate
----建立時生成資料對應的是build deferred
Refresh fast
----增量重新整理
On commit
----在基表有更新時提交,這裡該句對檢視無效
With rowid
----這裡建立基於rowid的物化檢視,對應的是 primary key
As
Select * from TEST;
----生成物化檢視資料語句
七、 小的知識點
建立主鍵約束語句:alter table table_name add(constraint constraint_name primary key(columes));
建議使用job來定期重新整理物化檢視