物化檢視-學習篇
create materialized view 物化檢視名稱 as 檢視定義
解釋:
預先計算並儲存表連線或匯聚等耗時較多的操作的結果;當查詢時,可以避免執行這些耗時的操作,從而快速達到的查詢結果。比較類似於索引。使用物化檢視的作用就是為了提高查詢效率。
物化檢視佔用一定的儲存空間,且當基表發生變化時,物化檢視也應重新整理。
物化檢視的優點比較:
(1)無物化檢視時:
SQL>select object_type,count(1) from dba_objects group by object_type;
(2)有物化檢視時:
SQL>create materialized view mv_object_count as select object_type,count(1) from dba_objects group by object_type;
SQL>select * form. mv_object_count;
可以通過比較兩者執行計劃,檢視兩者的查詢效率。
資料字典中獲取物化檢視資訊:
user_mviews
查詢物化檢視表
SQL>select object_name, object_type, status from user_objects where object_name='MV_OBJECT_COUNT';
OBJECT_NAME OBJECT_TYPE STATUS
--------------- ----------- ------
MV_OBJECT_COUNT TABLE VALID
MV_OBJECT_COUNT MATERIALIZED VIEW VALID
在查詢結果中含有兩條記錄,其中一條標識了物化檢視本身,而另一條則標識了物化檢視的附屬資料表。物化檢視建立時,會將查詢定義所獲得的資料載入到附屬資料表中。而當查詢物化檢視時,查詢的物件實際是物化檢視的附屬表。
建立物化檢視時,會先建立表,再將資料匯入。該過程將消耗較大的資源,甚至會影響客戶端的相應速度。此時,可以考慮在建立時使用延遲載入策略。
SQL> drop materialized view mv_object_count;
SQL> create materialized view mv_object_count build deferred as
2 select object_type, count(*) object_count
3 from tmp_user_objects
4 group by object_type;
SQL>select * from mv_object_count; 反饋結果無資料。
重新整理:
手動重新整理:
SQL>exec dbms_mview.refresh('mv_object_count');
SQL>select * from mv_object_count; 有結果反饋
基表提交時,自動重新整理:
SQL> alter materialized view mv_object_count refresh on commit;
此時更改基表後,如向基表中插入記錄數並提交,則資料自動同步。缺點:當資料頻繁更新時,將給資料庫效能帶來極大的負載。所以這種策略僅僅適用於那些讀取頻繁,而更新較少的場景下。
查詢重寫:
查詢重寫的物件為普通查詢語句。在查詢語句中,Oracle總是搜尋from子句中所指定的資料來源(表或檢視)。查詢重寫是指,當進行查詢時,Oracle改寫查詢語句,搜尋其他資料來源,以在保證相同結果的情況下提高執行效率。而這個新的資料來源,則往往是物化檢視。
當然,使用查詢重寫,首先要啟用物化檢視的查詢重寫功能。例如,對於檢視mv_object_count,啟用查詢重寫功能的SQL語句如下所示。
SQL> alter materialized view mv_object_count enable query rewrite;
SQL>select object_name, object_type, status from user_objects where object_name='MV_OBJECT_COUNT';
可以看出,雖然在整個查詢語句中,並未使用物化檢視mv_object_count。但由於查詢重寫功能的存在,Oracle自動將資料查詢的資料來源指向了mv_object_count
SQL> alter materialized view mv_object_count disable query rewrite;
SQL>select object_name, object_type, status from user_objects where object_name='MV_OBJECT_COUNT';
在執行計劃中可以看出,Oracle使用了from子句指定的查詢物件--tmp_user_objects進行查詢。查詢語句的花費基數為4。
SQL> alter materialized view mv_object_count enable query rewrite;
select count(*) from user_objects;
Oracle在執行過程中,會發現利用物化檢視mv_object_count可以獲得相同的查詢結果,並且更有效率,因此便使用了查詢重寫。這一切換過程是Oracle自動完成的,使用者無須手動控制。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26764468/viewspace-757997/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物化檢視學習筆記筆記
- 物化檢視妙用__表同步使用物化檢視方法
- 【物化檢視】幾種物化檢視日誌分析
- 【物化檢視】根據物化檢視日誌快速重新整理物化檢視的過程
- oracle物化檢視Oracle
- [20120808]學習物化檢視.txt
- 物化檢視詳解
- oracle 建立物化檢視Oracle
- Oracle 物化檢視建立Oracle
- materialized view (物化檢視)ZedView
- 物化檢視 on commitMIT
- 物化檢視日誌表被DROP後建立物化檢視報錯
- [20120809]學習物化檢視(補充).txt
- Oracle如何根據物化檢視日誌快速重新整理物化檢視Oracle
- 物化檢視的快速重新整理測試與物化檢視日誌
- 普通檢視和物化檢視的區別
- ORACLE中的物化檢視(OCM複習總結)Oracle
- calcite物化檢視詳解
- Oracle物化檢視詳解Oracle
- ORACLE物化檢視測試Oracle
- Oracle 物化檢視案例分享Oracle
- 物化檢視梳理總結
- ZT 物化檢視詳解
- Oracle物化檢視語法Oracle
- ORACLE物化檢視入門Oracle
- 刷物化檢視並行並行
- oracle物化檢視系列(二)Oracle
- oracle物化檢視系列(一)Oracle
- 12c 物化檢視 - 理解完全重新整理的物化檢視工作原理
- 物化檢視匯出匯入可能導致物化檢視日誌的失效
- Oracle普通檢視和物化檢視的區別Oracle
- 物化檢視重新整理並非完全根據物化檢視日誌記錄
- CUUG oracle物化檢視講解Oracle
- Oracle物化檢視3 - Prebuilt MVOracleUI
- Oracle 物化檢視 例項一Oracle
- Oracle物化檢視及SnapshotOracle
- 資料複製_物化檢視
- 物化檢視知識點滴