oracle的Hint

  与优化器模式相关的Hint

1 ALl_ROWS   让优化器启用CBO

/*+ all_rows */

2  first_rows(n)     让优化器启用CBO 模式,而且得到目标sql的执行计划是会选择那些能以最快时间返回n条记录的执行路径

/*+ first_rows */

3 rule   启用RBO 

/*+ rule */

与表访问相关

1    /*+ full */   对目标表执行全表扫描

2    /*+ rowid(tablename) */  针对单个表的HInt,他的含义是让优化器执行rowid 扫描,只有目标sql中使用了含rowid的where 条件时,rowid hint 才有意义。

与索引访问相关的hint

1  index   对目标表上的目标执行索引扫描操作

/* index (表名 目标索引(可多个)) */

/* index (表名) */

/* index (表名 目标索引对应的列名(可多个)) */

2 no_index    与index 相反

/* no_index (表名 目标索引(可多个)) */

/* no_index (表名) */

3 index_desc   执行索引时,降序扫描

/* index_desc   (表名 目标索引(可多个)) */

/* index_desc   (表名) */

4 index_combine  对目标表上的多个目标索引执行位图布尔运算

/* index_combine  (表名 目标索引(可多个)) */

/* index_combine  (表名) */

5   /*+ index_join(表名 目标索引(可多个)) */

/*+ index_join(表名) */

前提条件: select的所有查询列都存在目标表的多个目标索引中


6  and_equal 对目标表的多个目标索引执行 index_merge操作

/*+ and_equal(表名 目标索引(可多个)) */

/*+ and_equal(表名) */


与表连接顺序相关的hint

1 ordered 针对多个目标表,让优化器对多个目标表执行表连接操作时,按照sql的from字句中出现的顺序从左到右依次进行连接

/*+ ordered */

2 leading 针对多个目标表,让优化器将指定的多个表的连接结果作为目标sql表连接过程中的驱动结果集,并且将leading hint 中从左到右出现的第一个目标表作为整个表连接的首个驱动表

/*+ leading(表1 表2 表n) */


与表连接方法相关的Hint

1 use_merge 针对多个目标表,让优化器将我们指定的多个表作为被驱动表与其他表或结果集做排序合并连接

/*+ use_merge(表1 表2 表n) */

/*+ use_merge(表1,表2,...,表n) */


2 no_use_merge 针对多个目标表,不让优化器将我们指定的多个表作为被驱动表与其他表或结果集做排序合并连接

/*+ no_use_merge(表1 表2 表n) */

/*+ no_use_merge(表1,表2,...,表n) */

3 use_nl 针对多个目标表,让优化器将我们指定的多个表作为被驱动表与其他表或结果集做嵌套循环连接

/*+ use_nl(表1 表2 表n) */

/*+ use_nl(表1,表2,...,表n) */


4 no_use_nl 针对多个目标表,不让优化器将我们指定的多个表作为被驱动表与其他表或结果集做嵌套循环连接

/*+ no_use_nl(表1 表2 表n) */

/*+ no_use_nl(表1,表2,...,表n) */


5 use_hash 针对多个目标表,让优化器将我们指定的多个表作为被驱动表与其他表或结果集做哈希连接

/*+ use_hash(表1 表2 表n) */

/*+ use_hash(表1,表2,...,表n) */


6 no_use_hash 针对多个目标表,不让优化器将我们指定的多个表作为被驱动表与其他表或结果集做哈希连接

/*+ no_use_hash(表1 表2 表n) */

/*+ no_use_hash(表1,表2,...,表n) */


7 merge_aj 针对子查询,让优化器对相关目标表执行排序合并反连接

/*+ merge_aj */


8 nl_aj 针对子查询,让优化器对相关目标表执行嵌套循环反连接

/*+ nl_aj */


9 hash_aj 针对子查询,让优化器对相关目标表执行哈希反连接

/*+ hash_aj */


10 merge_sj 针对子查询,让优化器对相关目标表执行排序合并半连接

/*+ merge_sj */

11 nl_sj 针对子查询,让优化器对相关目标表执行嵌套循环半连接

/*+ nl_sj */


12 hash_sj 针对子查询,让优化器对相关目标表执行哈希半连接

/*+ hash_sj */

与查询转换相关的hint

1 use_concat 针对整个SQL的hint ,让优化器对目标sql使用IN_LIST 扩展(IN_List exception )或OR扩展(OR Exception )

/*+ use_concat */


2 no_expand 针对整个SQL的hint ,use_concat 的反义hint

/*+ no_expand */


3 merge 针对单个目标视图的hint,让优化器对目标视图执行视图合并(view merging)

/*+ merge(目标视图) */

如果是内嵌视图,此时的hint不要出现视图名


4 no_merge 针对单个目标视图的hint,是 merge的反义hint

/*+ no_merge(目标视图) */

如果是内嵌视图,此时的hint不要出现视图名

5 unnest 针对子查询的hint,让优化器对目标sql中的子查询执行子查询展开

/*+ unnest */


6 no_unnest 针对子查询的hint,unnest的反义hint

/*+ no_unnest */


7 expand_table 针对单个目标表的hint,让优化器在不考虑成本的情况下对目标表执行表扩展。

/*+ expand_table(目标表) */


8 no_expand_table 针对单个目标表的hint,expand_table的反义hint

/*+ no_expand_table(目标表) */

5  index_ffs  针对单个目标表。 对目标表的目标索引执行索引快速全扫描操作

/* index_ffs   (表名 目标索引(可多个)) */

/* index_ffs   (表名) */

6  index_join    针对单个目标表。对目标表上的多个目标索引执行 index join 操作

猜你喜欢

转载自www.cnblogs.com/yrjns/p/10827205.html
今日推荐