2011-05-19 77 views
2

如:oracle如何執行sql語句?

select country 
    from table1 
inner join table2 on table1.id=table2.id 
where table1.name='a' and table2.name='b' 
group by country 
解析後

,這部分將被首先執行?

回答

4

看起來您想知道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會根據可用的統計數據嘗試查找當前最佳的查詢計劃。

+0

有用的信息,你需要添加提示/ * + * gather_plan_statistics /您的查詢,或設置參數STATISTICS_LEVEL爲ALL。 – 2011-05-19 09:06:54

+0

@Rob謝謝,我知道我忘了東西 – 2011-05-19 09:15:45

+0

感謝您的回答,我還有一個問題,oracle如何選擇查詢計劃,以及如何生成查詢計劃,謝謝。 – Robin 2011-05-19 11:39:33

0

有很多地方,你可以在其中找到SQL is executed順序:

  1. FROM子句
  2. WHERE子句
  3. GROUP BY子句
  4. HAVING子句
  5. SELECT子句
  6. ORDER BY子句

但請注意,這是「理論」順序 - 只要最終結果看起來是通過使用上述順序生成的,則允許SQL引擎以其他順序執行操作。