Hint

Hint是Oracle提供的一种sql语法,它允许用户在sql中插入相关的语法来影响sql的执行方式。如果CBO(基于成本的优化器)认为使用Hint会导致错误的结果,Hint将被忽略

1. 访问路径相关的Hint:

FULL Hint: 告诉优化器对指定的表通过全表扫描的方式访问数据

  • select /*+ full(t) */ * from t;
  • select /*+ full(a) */ * from t a;

INDEX Hint: 告诉优化器对指定的表通过索引的方式访问数据,当访问索引会导致结果集不完整时,优化器将忽略这个Hint

select /*+ index(t t_ind) */ * from t where id>1;

NO_INDEX Hint:  告诉优化器对指定的表不允许使用索引的方式访问数据

select /*+ no_index(t t_ind) */ * from t where id>1;

INDEX_DESC Hint: 告诉优化器对指定的索引通过降序的方式访问数据,当访问索引会导致结果集不完整时,优化器将忽略这个Hint

select /*+ index_desc(t t_ind) */ * from t where id=1;

INDEX_COMBINE Hint: 告诉优化器强制使用位图索引,当访问索引会导致结果集不完整时,优化器将忽略这个Hint

select /*+ index_combine(t t_ind) */ * from t;

INDEX_FFS Hint: 告诉优化器以INDEX_FFS(INDEX Fast Full Scan)的方式访问数据,当访问索引会导致结果集不完整时,优化器将忽略这个Hint

select /*+ index_ffs(t t_ind) */ * from t where id<10;

INDEX_JOIN: 索引关联,当谓词中引用的列都有索引的时候,可以通过索引关联的方式来访问数据

select /*+ index_join(t t_ind t_bm) */ id from t where id>100 and name='hello';

2. 表关联顺序的Hint:

LEADIND Hint: 在一个多表关联的查询中,这个hint指定由哪个表作为驱动表(优化器优先访问哪个表上的数据)

select /*+ leading(t1, t) */ t.* from t, t1 where t1.id=t.id;

3. 表关联操作的Hint:

USE_HASH, USE_NL, USE_MERGE Hint: 这三种关联方式是多表关联中主要的关联方式。通常来讲,当两个表都比较大时,hash join的效率要高于nested loops(嵌套循环)。

hash join是将一个表(小一点那个表)做hash运算,将列数据存储到hash列表中,从另一个表抽取记录做hash运算,到hash列表中找到相应的值做匹配。

nested loop是从一个表中读取数据,访问另一张表(通常是索引)来做匹配,适用于一个关联表比较小的时候,效率更高。

merge join首先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据到另一个排序表中做匹配,它需要做更多的排序,所以消耗资源更多,通常来说,能够使用merge join的地方,hash join都可以发挥更好性能。

NO_USE_HASH, NO_USE_NL, NO_USE_MERGE Hint

4. 并行执行相关的Hint:

 PARALLEL Hint:指定sql执行的并行度,这个值将覆盖表自身设定的并行度,如果这个值为default,CBO将使用系统参数值

select /*+ parallel(t 4) */ count(*) from t;

NO_PARALLEL Hint

5.其他方面的Hint

DYNAMIC_SAMPLING Hint: 提示sql执行时动态采样的级别。从0-10,它将覆盖系统默认的动态采样级别

select /*+ dynamic_sampling(t 4) */ * from t where id>1;

 

 

 

转载于:https://www.cnblogs.com/PerOpt/p/3734019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值