查詢重寫
物化檢視另外一個重要的特性為查詢重寫。查詢重寫的物件為普通查詢語句。在查詢語句中,Oracle總是搜尋from子句中所指定的資料來源(表或檢視)。查詢重寫是指,當進行查詢時,Oracle改寫查詢語句,搜尋其他資料來源,以在保證相同結果的情況下提高執行效率。而這個新的資料來源,則往往是物化檢視。
當然,使用查詢重寫,首先要啟用物化檢視的查詢重寫功能。例如,對於檢視mv_object_count,啟用查詢重寫功能的SQL語句如下所示。
SQL> alter materialized view mv_object_count enable query rewrite;
Materialized view altered
alter materialized view mv_object_count用於修改檢視mv_object_count的屬性;enable query rewrite則用於啟用查詢重寫。
www.2cto.com
此時,查詢表tmp_user_objects中各種資料庫物件的個數,並利用PL/SQL Developer的執行計劃檢視執行過程細節,如圖11-14所示。
圖11-14 查詢重寫功能的執行細節
從圖中可以看出,雖然在整個查詢語句中,並未使用物化檢視mv_object_count。但由於查詢重寫功能的存在,Oracle自動將資料查詢的資料來源指向了mv_object_count。此時,SQL語句執行的花費基數為2。
可以首先禁用查詢重寫功能,然後檢視相同SQL語句的執行計劃。
SQL> alter materialized view mv_object_count disable query rewrite;
Materialized view altered
disable query rewrite用於禁用mv_object_count的查詢重寫。而查詢語句的執行計劃如圖11-15所示。
圖11-15 禁用查詢重寫後的執行計劃
在執行計劃中可以看出,Oracle使用了from子句指定的查詢物件--tmp_user_objects進行查詢。查詢語句的花費基數為4。
【示例11-24】 值得注意的是,並非與物化檢視的查詢定義完全相同的查詢語句,才可以享有查詢重寫功能所帶來的好處。
首先啟用mv_object_count的查詢重寫功能。
SQL> alter materialized view mv_object_count enable query rewrite;
Materialized view altered
然後,通過利用SQL查詢獲得表tmp_object_count的記錄總數,並在PL/SQL Developer的執行計劃中檢視,如圖11-16所示。
圖11-16 在執行計劃中檢視查詢重寫功能
Oracle在執行過程中,會發現利用物化檢視mv_object_count可以獲得相同的查詢結果,並且更有效率,因此便使用了查詢重寫。這一切換過程是Oracle自動完成的,使用者無須手動控制
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/241379/viewspace-752247/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MV】物化檢視查詢重寫
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- PostgreSQL 原始碼解讀(24)- 查詢語句#9(查詢重寫)SQL原始碼
- 查詢重寫——資料倉儲手冊
- 從查詢重寫角度理解elasticsearch的高亮原理Elasticsearch
- 查詢重寫對全外連線無效
- 查詢重寫對全外連線無效(二)
- Mysql查詢去重MySql
- 淺析物化檢視與查詢重寫(Enable query rewrite)
- 隱式轉換影響物化檢視查詢重寫
- 使用物化檢視查詢重寫 優化對於 UNION ALL檢視的CONNECT BY查詢優化
- Excel查詢重複項Excel
- 分頁查詢重構
- 重慶醫保查詢
- [譯] 如何使用 Pandas 重寫你的 SQL 查詢以及其他操作SQL
- Oracle最佳化技術---物化檢視查詢重寫query rewriteOracle
- mysql查詢去重方法解析MySql
- 查詢集合的重複項
- SQL重複記錄查詢SQL
- Oracle的查詢重啟動Oracle
- excel查重是怎麼查的 excel表格怎麼查詢重複項Excel
- MySQL 查詢重複的資料MySql
- 查詢Set中重複的元素
- 數字查詢統計重複
- 用WITH…AS改寫標量子查詢
- 學會寫高階查詢
- 查詢區分大小寫 (轉)
- 重學資料結構(八、查詢)資料結構
- 複合條件查詢的重構
- 在Django中查詢重複專案Django
- 模糊查詢區分大小寫嗎?
- 用Java寫股票查詢系統Java
- mysql字串之大小寫匹配查詢MySql字串
- vim 查詢不區分大小寫
- 12c 查詢重寫物化檢視 - DBMS_ADVISOR.TUNE_MVIEW的使用View
- mysql多表多欄位查詢並去重MySql
- CleverFiles Duplicates Finder for mac(重複檔案查詢)Mac
- 重溫二分查詢演算法演算法