物化檢視-學習篇
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ClickHouse 物化檢視學習總結
- 物化檢視
- 物化檢視(zt)
- calcite物化檢視詳解
- Oracle普通檢視和物化檢視的區別Oracle
- 資料庫的物化檢視資料庫
- 物化檢視分割槽實驗
- 物化檢視幾個知識點
- Oracle物化檢視的建立及使用(二)Oracle
- Oracle物化檢視的建立及使用(一)Oracle
- ClickHouse 效能優化?試試物化檢視優化
- ClickHouse效能優化?試試物化檢視優化
- 基於ROWID更新的物化檢視測試
- StarRocks 物化檢視重新整理流程及原理
- StarRocks 物化檢視重新整理流程和原理
- 物化檢視如何快速完成資料聚合操作?
- Postgres使用trigger自動重新整理物化檢視
- 物化檢視快速重新整理與ORA-00001
- 使用Materialise物化檢視解耦微服務架構解耦微服務架構
- MySQL之檢視學習MySql
- 火山引擎ByteHouse:如何最佳化ClickHouse物化檢視能力?
- hg_job配置定時重新整理物化檢視
- odoo檢視入門學習- tree檢視的使用Odoo
- 物化檢視日誌無法正常清除的解決方法
- 資料泵匯出匯入物化檢視(ORA-39083)
- 【MVIEW】Oracle通過物化檢視同步表資料及簡介ViewOracle
- 基於圖神經網路的動態物化檢視管理神經網路
- 用exp、imp遷移包含物化檢視日誌的資料
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- Flutter學習之檢視體系Flutter
- 使用SpringBoot+PostgreSQL物化檢視實現微服務設計模式 - vinsguruSpring BootSQL微服務設計模式
- 【學習】SQL基礎-015-檢視SQL
- iOS學習筆記04 檢視切換iOS筆記
- 學習下Linux 如何檢視磁碟空間Linux
- Echarts檢視視覺化-學習筆記(努力更新中)Echarts視覺化筆記
- 檢視提交歷史 —— Git 學習筆記 11Git筆記
- Android日常學習:Android檢視動畫-View AnimationAndroid動畫View
- 汽車之家基於 Apache Flink 的跨資料庫實時物化檢視探索Apache資料庫
- [20230225]12c Real-time materialized view 實時物化檢視的應用.txtZedView