博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hint
阅读量:6197 次
发布时间:2019-06-21

本文共 1804 字,大约阅读时间需要 6 分钟。

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

你可能感兴趣的文章
Swift语法之 ---- ?和!区别
查看>>
mysql 将指定列的浮点数转化为整数
查看>>
iOS开发之支付宝集成
查看>>
MySQL入门02-MySQL二进制版本快速部署
查看>>
线程实例
查看>>
Jquery操作select、checkbox、radio详细讲解
查看>>
Rabbitmq -Publish_Subscribe模式- python编码实现
查看>>
EF方便的添加一条信息...
查看>>
SharpGL学习笔记(十七) 立体文字和平面文字
查看>>
React Native知识10-ListView组件
查看>>
教你一招:Excel中使用MID函数获取身份证中的出生年月日
查看>>
ubuntu for win10 里运行apache+php
查看>>
分析oracle的执行计划(explain plan)并对对sql进行优化实践
查看>>
order by
查看>>
swift 类 与 结构体
查看>>
Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtil、GetterUtil使用...
查看>>
盒子模型
查看>>
[redis] redis.clients.jedis.exceptions.JedisDataException: MOVED 13102 127.0.0.1
查看>>
JavaScript常见原生DOM操作API总结
查看>>
angularjs 中的$digest和$apply区别
查看>>