Full Hint

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     |  
------------------------------------------------------------------------------  
|   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一次只能对一张表起作用 。             

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OceanBase 数据库在优化器方面与 MySQL 数据库的区别,主要表现在以下几个方面: 1. 查看执行计划的命令 1)输出的列信息仅包含 ID、OPERATOR、NAME、EST. ROWS 和 COST 以及算子的详细信息。 2)不支持使用 SHOW WARNINGS 显示额外的信息。 2. 查看统计信息 1)支持执行 ANALYZE TABLE 语句查询数据字典表存储有关列值的直方图统计信息。 2)支持通过内部表 __all_meta_table 查看表统计信息和列统计信息。 3. 查询改写优化 1)支持外联接优化 2)支持外联接简化 3)支持块嵌套循环和批量 Key 访问联接 4)支持条件过滤 5)支持常量叠算优化 6)支持 IS NULL 优化 (索引不存储 NULL 值) 7)支持 ORDER BY 优化 8)支持 GROUP BY 优化 9)支持 DISTINCT 消除 10)支持 LIMIT 下压 11)支持 Window 函数优化 12)支持避免全表扫描 13)支持谓词下压 4. Optimizer Hint 机制 1)支持联接顺序 Optimizer Hints 2)支持表级别的 Optimizer Hints 3)支持索引级别的 Optimizer Hints 4)语法支持 INDEX Hint、FULL Hint、ORDERED Hint 和 LEADING Hint 等,不支持 USE INDEX 和 FORCE INDEX。 5. 兼容 MySQL 数据库的并行执行能力包括并行查询、并行复制和并行写入等,且 OceanBase 数据库已经支持并行算子,包括并行聚集、并行联接、并行分组以及并行排序等。 6. OceanBase 数据库还支持计划缓存和预编译,MySQL 数据库并不支持。 以上是OceanBase与mysql的优化器区别,仿造该格式列出postgresql与mysql的优化器区别
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值