Oracle查詢轉換(一)簡單檢視合併
檢視的定義及分類參考:http://blog.itpub.net/28536251/viewspace-1871039/
如果目標SQL中包含了檢視,且該檢視為一個簡單檢視,則最佳化器會將檢視拆開,直接使用檢視的基表來生成執行計劃,故在執行計劃中將看不到檢視的名字了。
建立一個簡單檢視:
SQL> create view employees_50_vw as select employee_id,last_name,job_id,salary,commission_pct,department_id from employees where department_id=50;
View created.
SQL> select employee_id,last_name,salary,department_name from employees_50_vw e,departments d where e.department_id=d.department_id;
45 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1492013603
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 45 | 1575 | 4 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 45 | 1575 | 4 (0)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPARTMENTS | 1 | 16 | 1 (0)| 00:00:01 |
|* 3 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | | 0 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | EMPLOYEES | 45 | 855 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
可以看到執行計劃中沒有檢視employees_50_vw的名字,表示最佳化器已經做了檢視合併。可以使用NO_MERGE Hint來禁止最佳化器進行檢視合併:
SQL> select /*+ no_merge(e) */employee_id,last_name,salary,department_name from employees_50_vw e,departments d where e.department_id=d.department_id;
45 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3057875378
------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 45 | 3105 | 6 (17)| 00:00:01 |
| 1 | MERGE JOIN | | 45 | 3105 | 6 (17)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPARTMENTS | 27 | 432 | 2 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | DEPT_ID_PK | 27 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 45 | 2385 | 4 (25)| 00:00:01 |
| 5 | VIEW | EMPLOYEES_50_VW | 45 | 2385 | 3 (0)| 00:00:01 |
|* 6 | TABLE ACCESS FULL | EMPLOYEES | 45 | 855 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------------------------
可以看到執行計劃中出現了檢視employees_50_vw的名字,則表示最佳化器沒有對檢視進行檢視合併。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2140649/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL】Oracle查詢轉換之檢視合併SQLOracle
- Oracle查詢轉換(二)複雜檢視合併Oracle
- Oracle查詢轉換(三)外連線檢視合併Oracle
- Oracle 12CR2查詢轉換之檢視合併Oracle
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- 【SQL優化器查詢變換器】檢視合併(View Merging)SQL優化View
- 關於查詢轉換的一些簡單分析(一)
- Oracle 查詢轉換Oracle
- oracle 常用查詢檢視Oracle
- 水煮oracle31----連線查詢&合併查詢Oracle
- 合併查詢
- 關於查詢轉換的一些簡單分析(二)
- 關於查詢轉換的一些簡單分析(三)
- Oracle 查詢轉換初探Oracle
- MySQL 合併查詢union 查詢出的行合併到一個表中MySql
- 隱式轉換影響物化檢視查詢重寫
- Oracle Database 12c查詢最佳化器的缺陷-檢視合併會造成查詢結果不準確OracleDatabase
- MySQL 合併查詢join 查詢出的不同列合併到一個表中MySql
- 查詢表空間使用情況的簡單檢視
- Oracle 查詢轉換-01 or expansionOracle
- Oracle查詢轉換(五)子查詢展開Oracle
- 【PDB】Oracle跨PDB檢視查詢Oracle
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- SQL Story摘錄(一)————簡單查詢初探 (轉)SQL
- 【Oracle】如何查詢檢視時使用索引Oracle索引
- 記一次詭異的Oracle查詢轉換Oracle
- vim下多行查詢替換簡單命令
- 查詢轉換
- Oracle 12CR2查詢轉換之星型轉換Oracle
- SQL優化一則:取消檢視合併SQL優化
- Oracle 查詢轉換-04 Subquery UnnestingOracle
- Oracle XQuery查詢、構建和轉換XML(1)(轉)OracleXML
- 一個簡單的樹查詢
- 檢查特殊字元的簡單VCL (轉)字元
- 組合查詢 (轉)
- Oracle 查詢轉換-02 View MergingOracleView
- Oracle 查詢轉換-03 Predicate PushingOracle
- 【SQL】Oracle查詢轉換之謂詞推送SQLOracle