[Oracle][Performance]善用Materialized View提高查詢效能#2 Refresh Materialized view

[Oracle][Performance]善用Materialized View提高查詢效能#2 Refresh Materialized view

小弟覺得當一個DB新技術發表出來,如果限制繁多、效能太差和一點都不Smart

那基本上在真實資料庫環境中就沒啥可用性可談

SQL2005/2008 Indexed Views概念可說和Oracle MV相同,但可能限制太多讓大部份DBA選擇放棄使用(有些還沒聽過XD)

anyway~~這篇就來介紹MV更新模式。

 

文章均為自己見解,有錯還請指教

 

更新選項

Fast:快速(增量)刷新,雖然這是首選不過也會依據查詢的sql有不同的限制。

Complete:完整刷新,會刪除MVL後在依據查詢sql重新產生MV(花費更多時間)。

Force:由Oracle自動判斷是否滿足fast refresh條件否則就執行complete(預設)。

 

更新模式

On demend:可以依據使用者的需求手動刷新MV或排成JOB刷新MV。

On commit:依據Base table異動(DML),自動刷新MV(有相關限制同時也較花費時間)。

Refresh optionpropose
FastMV所基於的table非常大。
CompleteInsert的資料大於table資料 50%以上。
Fast刷新時間大於complete。

 

參數

job_queue_processes=10

job_queue_processes不可小於0,不然無法refresh。

 

限制列表

Materialized viewFast refreshOn commit

Query rewtite

Table需有PK或index(才可fash refrsh)不能包含sysdate或rownum。(不重複)MV只能使用rowid不支援remote table
Table不能包含long或long raw類型From敘述中的所有table 的MVL需為rowid不能針對remote tableBase table和MV都不能置於sys下
 From敘述中的所有table的rowid需出現在select敘述中MVL建立需使用rowid、seq、including new values不允許conntect by

該表只列出大方向,想要確認SQL是否可以使用MV,建議使用Oracle Advisor

(因為小弟腦容量沒那麼大,Advisor在11g的效果遠大於10g,真的要好好利用~^^)

 

下篇再來介紹Query Rewrite