使用Oracle Hint提示來更改執行計劃
使用 Oracle 提示可能非常複雜,而 Oracle 開發人員只是將提示用作最後的手段,首先應改變統計量來更改執行計劃。Oracle 包含 124 種以上的提示,其中許多提示在 Oracle 文件中找不到。(參見)
讓我們快速瀏覽如何使用提示來改變最佳化器執行計劃:最佳化器提示是放置在 SQL 語句的註釋內的最佳化器指示,用於那些不常出現的情況,即最佳化器作出了關於執行計劃的不正確決策。由於提示處於註釋內,因此確保提示名稱拼寫正確並確保提示適用於該查詢十分重要。
例如,以下提示是無效的,因為 first_rows 訪問與並行訪問相互排斥。這是因為 parallel 始終假定進行全表掃描,而 first_rows 支援進行索引訪問。
-- An invalid hint select /*+ first_rows parallel(emp,8)*/ emp_name from emp order by ename;
某些 Oracle 專業人員會將提示集合在一起,以強化他們的期望。例如,如果我們有一臺具有八個或更多 CPU 的 SMP 伺服器,則我們可能希望使用 Oracle 並行查詢來加速合法的全表掃描。在使用並行查詢時,我們很少會希望在表一級啟用並行機制 (alter table customer parallel 35;),因為表的並行機制設定會影響最佳化器,導致最佳化器認為全表掃描的代價並不高。因此,多數 Oracle 專業人員在逐個查詢的基礎上指定並行查詢,將完全提示與 parallel 提示聯合使用,以確保快速的並行全表掃描:
-- A valid hint select /*+ full parallel(emp,35)*/ emp_name from emp order by ename;
既然我們已經瞭解了提示的一般性概念,就讓我們來觀察最佳化器調整最重要的提示之一。
ordered 提示確定查詢執行的驅動表,還指定將表聯接在一起的順序。ordered 提示要求表應該以它們在 from 子句中所指定的順序進行聯接,from 子句中的第一個表指定為驅動表。使用 ordered 提示可以節省大量的分析時間,並加速 SQL 的執行,因為您告訴最佳化器聯接表的最佳順序。
例如,以下查詢使用排序提示,將表以它們在 from 子句中指定的順序聯接起來。在該示例中,我們透過指定 emp 到 dept 的聯接使用雜湊聯接,sal 到 bonus 的聯接使用巢狀迴圈聯接,進一步改進了執行計劃:
select /*+ ordered use_hash (emp, dept) use_nl (sal, bon) */ from emp, dept, sal, bon where . . .
當然,ordered 提示最常用於資料倉儲查詢或聯接超過五個表的 SQL 中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85052/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Oracle Hint提示來更改執行計劃 ZTOracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 使用hint改變執行計劃
- 【sql調優之執行計劃】使用hint(五)Hint for parallelSQLParallel
- 通過內部的hint來控制執行計劃
- 使用no_merge結合其它hint完全控制Oracle執行計劃Oracle
- 【sql調優之執行計劃】使用hint(四)Hints for JoinSQL
- 【sql調優之執行計劃】使用hint(三)Hints for Query TransformationsSQLORM
- 【sql調優之執行計劃】使用hint(二)Hints for Access PathsSQL
- oracle執行計劃的使用(EXPLAIN)OracleAI
- 【sql調優之執行計劃】使用hint(六) append and noappendSQLAPP
- ORACLE執行計劃Oracle
- Oracle執行計劃Explain Plan 如何使用OracleAI
- 【sql調優之執行計劃】使用hint(一)Hints for Optimization Approaches and GoalsSQLAPPGo
- 使用EXPLAIN PLAN來檢視執行計劃AI
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle 索引和執行計劃Oracle索引
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- oracle 執行計劃變更Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle
- oracle使用outline固定執行計劃事例Oracle
- ORACLE 11G 使用SPM來調整SQL語句的執行計劃OracleSQL
- 加hint改變執行計劃訪問順序優化sql優化SQL
- 使用10046事件檢視oracle執行計劃事件Oracle
- Oracle-繫結執行計劃Oracle
- 【SPM】Oracle如何固定執行計劃Oracle
- Oracle檢視執行計劃(五)Oracle
- Oracle檢視執行計劃(六)Oracle
- Oracle檢視執行計劃(一)Oracle
- Oracle檢視執行計劃(二)Oracle
- Oracle檢視執行計劃(三)Oracle