[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 option | propose |
Fast | MV所基於的table非常大。 |
Complete | Insert的資料大於table資料 50%以上。 Fast刷新時間大於complete。 |
參數
job_queue_processes=10
job_queue_processes不可小於0,不然無法refresh。
限制列表
Materialized view | Fast refresh | On commit | Query rewtite |
Table需有PK或index(才可fash refrsh) | 不能包含sysdate或rownum。(不重複) | MV只能使用rowid | 不支援remote table |
Table不能包含long或long raw類型 | From敘述中的所有table 的MVL需為rowid | 不能針對remote table | Base table和MV都不能置於sys下 |
From敘述中的所有table的rowid需出現在select敘述中 | MVL建立需使用rowid、seq、including new values | 不允許conntect by |
該表只列出大方向,想要確認SQL是否可以使用MV,建議使用Oracle Advisor
(因為小弟腦容量沒那麼大,Advisor在11g的效果遠大於10g,真的要好好利用~^^)
下篇再來介紹Query Rewrite