Full Hint
2014-12-31 11:52
721 查看
Full Hint可以提示优化器对指定的表进行全表扫描,需要注意的是Full一次只能对一张表起作用。
下面是实验过程
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Personal Oracle Database 10g Release 10.2.0.1.0 - Production
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0
Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
这是我的oracle环境
SQL> desc test1;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> desc test2
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> create index pk_test1 on test1(empno);
索引已创建。
SQL> create index pk_test2 on test2(empno);
索引已创建。
SQL> select test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 1756776100
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 1 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 14 | 364 | 1 (0)| 00:00:01 |
| 2 | INDEX FULL SCAN | PK_TEST1 | 14 | 182 | 1 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN| PK_TEST2 | 1 | 13 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
初始情况下,优化器选择对两张表进行索引扫描
SQL> select /*+full(test1)*/ test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 3442032678
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 3 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 14 | 364 | 3 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| TEST1 | 14 | 182 | 3 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | PK_TEST2 | 1 | 13 | 0 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
使用full干预后,对test1进行全表扫描
SQL> select /*+full(test1 test2)*/ test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 1756776100
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------
4000
------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 1 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 14 | 364 | 1 (0)| 00:00:01 |
| 2 | INDEX FULL SCAN | PK_TEST1 | 14 | 182 | 1 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN| PK_TEST2 | 1 | 13 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
使用full(test1 test2)进行干预后,发现没有全表扫描,说明full一次只能对一张表起作用
SQL> select /*+full(test1) full(test2)*/ test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 497311279
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 7 (15)| 00:00:01 |
|* 1 | HASH JOIN | | 14 | 364 | 7 (15)| 00:00:01 |
| 2 | TABLE ACCESS FULL| TEST1 | 14 | 182 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| TEST2 | 14 | 182 | 3 (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
使用/*+full(test1) full(test2)*/ 进行干预后,优化器对test1和test2都进行了全表扫描,进一步说明full一次只能对一张表起作用 。
下面是实验过程
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Personal Oracle Database 10g Release 10.2.0.1.0 - Production
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0
Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
这是我的oracle环境
SQL> desc test1;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> desc test2
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> create index pk_test1 on test1(empno);
索引已创建。
SQL> create index pk_test2 on test2(empno);
索引已创建。
SQL> select test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 1756776100
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 1 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 14 | 364 | 1 (0)| 00:00:01 |
| 2 | INDEX FULL SCAN | PK_TEST1 | 14 | 182 | 1 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN| PK_TEST2 | 1 | 13 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
初始情况下,优化器选择对两张表进行索引扫描
SQL> select /*+full(test1)*/ test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 3442032678
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 3 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 14 | 364 | 3 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| TEST1 | 14 | 182 | 3 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | PK_TEST2 | 1 | 13 | 0 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
使用full干预后,对test1进行全表扫描
SQL> select /*+full(test1 test2)*/ test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 1756776100
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------
4000
------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 1 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 14 | 364 | 1 (0)| 00:00:01 |
| 2 | INDEX FULL SCAN | PK_TEST1 | 14 | 182 | 1 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN| PK_TEST2 | 1 | 13 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
使用full(test1 test2)进行干预后,发现没有全表扫描,说明full一次只能对一张表起作用
SQL> select /*+full(test1) full(test2)*/ test1.empno,test2.empno from test1,test2
2 where test1.empno=test2.empno;
已选择14行。
执行计划
----------------------------------------------------------
Plan hash value: 497311279
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 364 | 7 (15)| 00:00:01 |
|* 1 | HASH JOIN | | 14 | 364 | 7 (15)| 00:00:01 |
| 2 | TABLE ACCESS FULL| TEST1 | 14 | 182 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| TEST2 | 14 | 182 | 3 (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("TEST1"."EMPNO"="TEST2"."EMPNO")
Note
-----
- dynamic sampling used for this statement
使用/*+full(test1) full(test2)*/ 进行干预后,优化器对test1和test2都进行了全表扫描,进一步说明full一次只能对一张表起作用 。
相关文章推荐
- Full Hint
- Full Hint
- Linux下各种桌面环境开启字体完全渲染(hintfull)的工具和方法
- Mysql 连接(left join, right join, inner join ,full join)
- iOS 当使用FD_FullscreenPopViewController的时候遇到scrollView右滑手势无法使用的解决
- make flash FLASH_CONFIG=jtag_full
- 线上FullGC频繁的排查
- jQuery-全屏滚动插件【fullPage.js】API 使用方法总结
- 解决ViewPager嵌套时Fragment的mUserVisibleHint属性不同步的问题
- How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)
- fragment hint show 方法 怎么刷新
- hint:this error often happens when you are running the packager(local dev server)
- MYSQL5.7版本sql_mode=only_full_group_by问题
- 关于parallel_case和full_case的使用
- Java触发FULLGC的条件汇总
- mysql索引类型normal,unique,full text的区别
- FullCalendar(日程管理控件)
- Full Screen Control——全屏控件
- 用run_full_trafodion_backup.sh全库备份恢复单表
- django 中间件 request.path 与get_full_path