使用Oracle Hint提示來更改執行計劃 ZT
發表於:2007.11.26 15:30
分類: Oracle資料庫管理
出處:http://tolywang.itpub.net/post/48/418116
---------------------------------------------------------------
使用 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/82387/viewspace-1016039/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle執行計劃Explain Plan 如何使用OracleAI
- oracle使用outline固定執行計劃事例Oracle
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle調優之看懂Oracle執行計劃Oracle
- Oracle-繫結執行計劃Oracle
- Oracle檢視執行計劃的命令Oracle
- Oracle緊急固定執行計劃之手段Oracle
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- Oracle之Hint使用總結Oracle
- 執行計劃-1:獲取執行計劃
- 生產環境使用10053分析Oracle的執行計劃Oracle
- 知識篇 | ORACLE 如何執行計劃繫結Oracle
- Oracle如何檢視真實執行計劃(一)Oracle
- Oracle如何手動重新整理執行計劃Oracle
- Oracle 通過註釋改變執行計劃Oracle
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- 在Oracle中,如何得到真實的執行計劃?Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(五)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(四)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(三)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(二)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(一)Oracle
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- MySql中執行計劃如何來的——Optimizer TraceMySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- MySQL執行計劃MySql
- 【TUNE_ORACLE】定製化執行計劃SQL參考OracleSQL
- MySQL Cases-執行計劃向Oracle看齊(FORMAT=tree)MySqlOracleORM
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- Oracle檢視sql_id 的歷史執行計劃OracleSQL
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- oracle enqueue(zt)OracleENQ
- Oracle 變數窺視引起執行計劃異常故障分析Oracle變數
- oracle執行計劃------未走索引,隱式轉換的坑Oracle索引
- Oracle優化案例-從執行計劃定位SQL問題(三)Oracle優化SQL