select country
from table1
inner join table2 on table1.id=table2.id
where table1.name='a' and table2.name='b'
group by country
解析後
,這部分將被首先執行?
select country
from table1
inner join table2 on table1.id=table2.id
where table1.name='a' and table2.name='b'
group by country
解析後
,這部分將被首先執行?
看起來您想知道Oracle選擇的執行計劃。您可以從Oracle本身獲取輸出繼電器:
set serveroutput off
< your query with hint "/*+ gather_plan_statistics */" inserted after SELECT >
select * from table(dbms_xplan.display_cursor(null, null, 'last allstats'));
在這裏看到一個解釋如何閱讀查詢計劃:http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/ex_plan.htm#i16971
注意然而,一個查詢計劃的選擇是不固定的。 Oracle會根據可用的統計數據嘗試查找當前最佳的查詢計劃。
有很多地方,你可以在其中找到SQL is executed順序:
- FROM子句
- WHERE子句
- GROUP BY子句
- HAVING子句
- SELECT子句
- ORDER BY子句
但請注意,這是「理論」順序 - 只要最終結果看起來是通過使用上述順序生成的,則允許SQL引擎以其他順序執行操作。
如果您從Oracle安裝免費工具SQL * Developer,則可以單擊按鈕以獲取解釋計劃。
有用的信息,你需要添加提示/ * + * gather_plan_statistics /您的查詢,或設置參數STATISTICS_LEVEL爲ALL。 – 2011-05-19 09:06:54
@Rob謝謝,我知道我忘了東西 – 2011-05-19 09:15:45
感謝您的回答,我還有一個問題,oracle如何選擇查詢計劃,以及如何生成查詢計劃,謝謝。 – Robin 2011-05-19 11:39:33