基於Oracle的sql最佳化(1)
先建立表和索引
create table emp_temp as select * from emp;
create index idx_mgr_temp on emp_temp(mgr);
create index idx_deptno_temp on emp_temp(deptno);
執行sql
select * from emp_temp where mgr>100 and deptno >100;
檢視最佳化器模式:
SQL> show parameter optimizer_mode;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS
SQL> select name, value from v$parameter where name='optimizer_mode';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
optimizer_mode
ALL_ROWS
修改
SQL> alter session set optimizer_mode='RULE'; (scott)
SQL> set autotrace traceonly explain;
SQL> select * from emp_temp where mgr>100 and deptno >100;
Execution Plan
----------------------------------------------------------
Plan hash value: 1670750536
-------------------------------------------------------
| Id | Operation | Name |
-------------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS BY INDEX ROWID| EMP_TEMP |
|* 2 | INDEX RANGE SCAN | IDX_DEPTNO_TEMP |
-------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("MGR">100)
2 - access("DEPTNO">100)
Note
-----
- rule based optimizer used (consider using cbo)
此時如果我們發現走deptno的索引沒有mgr的效率高,我們該怎麼辦?
SQL> select * from emp_temp where mgr>100 and deptno+0>100;
Execution Plan
----------------------------------------------------------
Plan hash value: 2973289657
----------------------------------------------------
| Id | Operation | Name |
----------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS BY INDEX ROWID| EMP_TEMP |
|* 2 | INDEX RANGE SCAN | IDX_MGR_TEMP |
----------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("DEPTNO"+0>100)
2 - access("MGR">100)
Note
-----
- rule based optimizer used (consider using cbo)
SQL>
create table emp_temp as select * from emp;
create index idx_mgr_temp on emp_temp(mgr);
create index idx_deptno_temp on emp_temp(deptno);
執行sql
select * from emp_temp where mgr>100 and deptno >100;
檢視最佳化器模式:
SQL> show parameter optimizer_mode;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS
SQL> select name, value from v$parameter where name='optimizer_mode';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
optimizer_mode
ALL_ROWS
修改
SQL> alter session set optimizer_mode='RULE'; (scott)
SQL> set autotrace traceonly explain;
SQL> select * from emp_temp where mgr>100 and deptno >100;
Execution Plan
----------------------------------------------------------
Plan hash value: 1670750536
-------------------------------------------------------
| Id | Operation | Name |
-------------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS BY INDEX ROWID| EMP_TEMP |
|* 2 | INDEX RANGE SCAN | IDX_DEPTNO_TEMP |
-------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("MGR">100)
2 - access("DEPTNO">100)
Note
-----
- rule based optimizer used (consider using cbo)
此時如果我們發現走deptno的索引沒有mgr的效率高,我們該怎麼辦?
SQL> select * from emp_temp where mgr>100 and deptno+0>100;
Execution Plan
----------------------------------------------------------
Plan hash value: 2973289657
----------------------------------------------------
| Id | Operation | Name |
----------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS BY INDEX ROWID| EMP_TEMP |
|* 2 | INDEX RANGE SCAN | IDX_MGR_TEMP |
----------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("DEPTNO"+0>100)
2 - access("MGR">100)
Note
-----
- rule based optimizer used (consider using cbo)
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29674916/viewspace-2132832/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於Oracle的SQL最佳化OracleSQL
- 好書推薦—《基於Oracle的SQL最佳化》OracleSQL
- 從一條巨慢SQL看基於Oracle的SQL最佳化SQLOracle
- Sql最佳化(三) 關於oracle的併發SQLOracle
- 基於索引的SQL語句最佳化之降龍十八掌(1)(轉)索引SQL
- SQL最佳化1SQL
- 讀書筆記-《基於Oracle的SQL優化》-第二章-1筆記OracleSQL優化
- Oracle SQL的最佳化[轉]OracleSQL
- Oracle SQL Like 的最佳化OracleSQL
- 微課sql最佳化(1)、基礎概念介紹SQL
- 基於sql最佳化,rule的使用小改動大變化SQL
- 學習筆記-《基於Oracle的SQL優化》-第一章-1筆記OracleSQL優化
- Oracle SQL效能最佳化OracleSQL
- Oracle sql 效能最佳化OracleSQL
- Oracle SQL最佳化總結OracleSQL
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- Oracle效能最佳化方法論的發展之二:基於OWI的效能最佳化方法論Oracle
- oracle最佳化sql的內部過程OracleSQL
- Oracle SQL 'or' 的最佳化,最近的案例一則。OracleSQL
- 基於Python的效能最佳化Python
- 基於Oracle的高效能動態SQL程式開發OracleSQL
- Oracle Optimizer:遷移到使用基於成本的最佳化器-----系列1.1 (轉)Oracle
- ORACLE SQL概述(1)OracleSQL
- Oracle SQL效能最佳化常用方法OracleSQL
- 基於索引的SQL語句最佳化之降龍十八掌(3)(轉)索引SQL
- 基於索引的SQL語句最佳化之降龍十八掌(2)(轉)索引SQL
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- 基於Oracle的高效能動態SQL程式開發(轉)OracleSQL
- oracle SQL效能最佳化大總結OracleSQL
- ORACLE SQL效能最佳化系列 (十) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (十一) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (一) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (二) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (三) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (四) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (九) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (五) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (八) (轉)OracleSQL