【sql調優之執行計劃】使用hint(一)Hints for Optimization Approaches and Goals
版本:10.2.0.4
Hints for Optimization Approaches and Goals
可以通過使用hint來改變或者指定優化器對執行計劃的選擇,分類來看這些hint的使用規則和一些例子。
Hints for optimization approaches and goals
一些優化目標的hint比如:
All_rows,first_rows(n),rule
10g預設的優化模式是all_rows,也就是使用choose的時候優化器選擇的優化器模式。除了rule之外,其他都是CBO的優化模式。
看看hint對執行計劃影響的例子:
SQL> set linesize 1000
SQL> set autot traceonly explain;
SQL> select /*+ all_rows */* from scott.emp a,scott.dept b
2 where a.deptno = a.deptno;
Execution Plan
----------------------------------------------------------
Plan hash value: 2034389985
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 52 | 3016 | 8 (0)| 00:00:01 |
| 1 | MERGE JOIN CARTESIAN| | 52 | 3016 | 8 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 |
| 3 | BUFFER SORT | | 13 | 494 | 5 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | EMP | 13 | 494 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("A"."DEPTNO" IS NOT NULL)
SQL> select /*+ first_rows(2) */* from scott.emp a,scott.dept b
2 where a.deptno = a.deptno;
Execution Plan
----------------------------------------------------------
Plan hash value: 4192419542
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 116 | 4 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 2 | 116 | 4 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| DEPT | 2 | 40 | 2 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| EMP | 2 | 76 | 2 (0)| 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter("A"."DEPTNO" IS NOT NULL)
SQL> select /*+ first_rows(100) */* from scott.emp a,scott.dept b
2 where a.deptno = a.deptno;
Execution Plan
----------------------------------------------------------
Plan hash value: 2034389985
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 52 | 3016 | 8 (0)| 00:00:01 |
| 1 | MERGE JOIN CARTESIAN| | 52 | 3016 | 8 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 |
| 3 | BUFFER SORT | | 13 | 494 | 5 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | EMP | 13 | 494 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("A"."DEPTNO" IS NOT NULL)
SQL>
或者使用rule的hint,即RBO:
SQL> select /*+ rule */* from scott.emp a,scott.dept b
2 where a.deptno = a.deptno;
Execution Plan
----------------------------------------------------------
Plan hash value: 4192419542
-----------------------------------
| Id | Operation | Name |
-----------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
| 2 | TABLE ACCESS FULL| DEPT |
|* 3 | TABLE ACCESS FULL| EMP |
-----------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter("A"."DEPTNO"="A"."DEPTNO")
Note
-----
- rule based optimizer used (consider using cbo)
SQL>
也可以使用choose,讓優化器自動選擇,這也是預設的情況
SQL> select /*+ choose */* from scott.emp a,scott.dept b
2 where a.deptno = a.deptno;
Execution Plan
----------------------------------------------------------
Plan hash value: 2034389985
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 52 | 3016 | 8 (0)| 00:00:01 |
| 1 | MERGE JOIN CARTESIAN| | 52 | 3016 | 8 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 |
| 3 | BUFFER SORT | | 13 | 494 | 5 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | EMP | 13 | 494 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("A"."DEPTNO" IS NOT NULL)
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-671829/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql調優之——執行計劃explainMySqlAI
- Oracle調優之看懂Oracle執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- SQL優化案例-從執行計劃定位SQL問題(三)SQL優化
- MySQL調優篇 | EXPLAIN執行計劃解讀(4)MySqlAI
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- Oracle優化案例-從執行計劃定位SQL問題(三)Oracle優化SQL
- SQL優化案例-改變那些CBO無能為力的執行計劃(一)SQL優化
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- 如何檢視SQL的執行計劃SQL
- TiDB 查詢優化及調優系列(四)查詢執行計劃的調整及優化原理TiDB優化
- SQL執行內幕:從執行原理看調優的本質SQL
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- 十六、Mysql之Explain執行計劃MySqlAI
- 獲取執行計劃之Autotrace
- 檢視一個正在執行的sql的執行計劃(explain for connection processlist_id)SQLAI
- 執行計劃-1:獲取執行計劃
- Mysql SQL最佳化系列之——執行計劃連線方式淺釋MySql
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- Oracle SQL調優系列之SQL Monitor ReportOracleSQL
- 使用sql monitor獲取更加詳細的執行計劃 - dbms_sqltune.report_sql_monitorSQL
- MongoDb學習之Explain執行計劃MongoDBAI
- Oracle優化案例-view merge與coe_load_sql_profile固定執行計劃(十五)Oracle優化ViewSQL
- 不會看 Explain執行計劃,勸你簡歷別寫熟悉 SQL優化AISQL優化
- 不會看 Explain 執行計劃,勸你簡歷別寫熟悉 SQL 優化AISQL優化
- SQL最佳化案例-從執行計劃定位SQL問題(三)SQL
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- MySQL查詢優化之優化器工作流程以及優化的執行計劃生成MySql優化
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- MySQL 5.7 優化不能只看執行計劃MySql優化
- Oracle執行計劃Explain Plan 如何使用OracleAI
- oracle使用outline固定執行計劃事例Oracle
- SQL Server一次SQL調優案例SQLServer
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- spark sql語句效能最佳化及執行計劃SparkSQL