我想了解在Oracle的解釋計劃,想知道而形成的解釋計劃瞭解在Oracle的解釋計劃
我是測試在HR模式目前在Oracle 11g中
一個簡單的查詢哪些條件甲骨文認爲select * from countries
where region_id in (select region_id from regions where region_name = 'Europe');
當我運行以下查詢:
explain plan for
select * from countries
where region_id in (select region_id from regions where region_name = 'Europe');
SELECT * FROM table(dbms_xplan.display(null,null,'basic'));
我在解釋表下面的輸出:
--------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
| 2 | INDEX FULL SCAN | COUNTRY_C_ID_PK |
| 3 | TABLE ACCESS BY INDEX ROWID| REGIONS |
| 4 | INDEX UNIQUE SCAN | REG_ID_PK |
--------------------------------------------------------
在這裏,我觀察到,外部查詢被首先執行,即國家表首先執行如用行3.
現在我增加了一個索引上的區域表的REGION_NAME跑解釋計劃再次 ,得到了下面的輸出現在
--------------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
| 2 | TABLE ACCESS BY INDEX ROWID| REGIONS |
| 3 | INDEX RANGE SCAN | REGIONNAME_REGIONS_IX |
| 4 | INDEX UNIQUE SCAN | COUNTRY_C_ID_PK |
| 5 | INDEX RANGE SCAN | COUNTRIES_REGIONID_IX |
--------------------------------------------------------------
我的問題是:
- 應該不是內部查詢首先執行,不管索引是否存在
- 如果添加索引改變執行計劃,還有哪些其他功能可以改變它?
- 在一般情況下,執行過程是什麼樣的,它是順序的(首先執行首先發生的連接,然後進入查詢中的下一個連接)?
在此先感謝您的幫助。
-Varun