查詢重寫
物化檢視另外一個重要的特性為查詢重寫。查詢重寫的物件為普通查詢語句。在查詢語句中,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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- PostgreSQL 原始碼解讀(24)- 查詢語句#9(查詢重寫)SQL原始碼
- 從查詢重寫角度理解elasticsearch的高亮原理Elasticsearch
- Mysql查詢去重MySql
- Excel查詢重複項Excel
- 重慶醫保查詢
- [譯] 如何使用 Pandas 重寫你的 SQL 查詢以及其他操作SQL
- 硬核解讀,WeTune是如何提升資料庫查詢重寫效能?資料庫
- mysql查詢去重方法解析MySql
- excel查重是怎麼查的 excel表格怎麼查詢重複項Excel
- 查詢Set中重複的元素
- MySQL 查詢重複的資料MySql
- 模糊查詢區分大小寫嗎?
- 在Django中查詢重複專案Django
- 重學資料結構(八、查詢)資料結構
- 二分查詢 | 二分查詢的一種推薦寫法
- mybatis多表聯合查詢的寫法MyBatis
- 如何在 django 中用 orm 寫子查詢DjangoORM
- [20201201]約束大寫與查詢.txt
- mysql多表多欄位查詢並去重MySql
- CleverFiles Duplicates Finder for mac(重複檔案查詢)Mac
- es的複雜查詢測試,使用jest的dsl工具寫查詢語句
- 手寫下拉選單,模糊查詢資料
- 複雜查詢還是直接寫sql吧SQL
- mysql連表查詢出現資料重複MySql
- 寫一個“特殊”的查詢構造器 – (四、條件查詢:複雜條件)
- SQL查詢的:子查詢和多表查詢SQL
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- spring data JPA 模糊查詢 --- 使用 LIKE --- 的寫法Spring
- mysql 查詢出重複資料的第一條MySql
- Duplicate File Finder Pro Mac重複檔案查詢工具Mac
- 複雜查詢—子查詢
- 查詢——二分查詢
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 查詢演算法__Fibonacci查詢演算法
- group by,having查詢 ”每**“的查詢
- Elasticsearch複合查詢——boosting查詢Elasticsearch
- 寫作論文怎麼查詢文獻資料
- hyperf 使用模型寫 union 子查詢並做分頁模型