oracle常用hint是怎样的

54次阅读
没有评论

共计 2849 个字符,预计需要花费 8 分钟才能阅读完成。

oracle 常用 hint 是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1./*+ ALL_ROWS */ 
希望优化程序给出一种尽快得到全部记录的执行计划,目标是增加系统的吞吐量。

2./*+ FIRST_ROWS(n) */
希望优化程序给出一种可以迅速的得到第一行的执行计划,目标是减少系统的响应时间。

3./*+ FULL(TABLE)*/
表明对表选择全局扫描的方法.

4./*+ INDEX(TABLE INDEX_NAME) */
表明对表选择索引的扫描方法.

5./*+ INDEX_ASC(TABLE INDEX_NAME)*/
表明对表选择索引升序的扫描方法.

6./*+ INDEX_DESC(TABLE INDEX_NAME)*/
表明对表选择索引降序的扫描方法. 

7./*+ INDEX_COMBINE*/
从索引中取得 ROWID 信息,通过 BITMAP CONVERSION FROM ROWIDS 转换成位图,再通过 BITMAP AND 把多个位图信息
组合并匹配,得到的位图信息再经过 BITMAP CONVERSION TO ROWIDS 转换成 ROWID,然后访问表或者直接返回数据。

8./*+ INDEX_JOIN(TABLE INDEX_NAME1 INDEX_NAME2) */
index_join 的工作原理:
index_join 的前提条件是查询的数据都可以用索引中得到,Oracle 通过 hash index join 方式对索引
数据进行处理并直接返回,从而避免了对表的访问。index_join 使用的索引可以是唯一索引,也可以是多列索引。
index_join 的限制条件:
1. 查询的数据都可以用索引中得到。
2. 谓词条件中不能存在非索引列的谓词

9. /*+ INDEX_FFS(TABLE INDEX_NAME) */
index fast full scan 使用多块读的方式读取索引块,产生 db file scattered reads 事件,读取时高效,但为无序读取。
index full scan 使用单块读方式有序读取索引块,产生 db file sequential reads 事件,当采用该方式读取大量索引全扫描,效率低下

10./*+ INDEX_SS(T T_IND) */
从 9i 开始,oracle 引入了这种索引访问方式。当在一个联合索引中,某些谓词条件并不在联合索引的第一列时,可以通过 Index Skip Scan 来访问索引获得数据。当联合索引第一列的唯一值个数很少时,使用这种方式比全表扫描效率高。

11./*+ leading(table_1,table_2) */ 
在多表关联查询中,指定哪个表作为驱动表,即告诉优化器首先要访问哪个表上的数据。

12./*+ ordered */ 
让 Oracle 根据 from 后面表的顺序来选择驱动表,oracle 建议使用 leading,他更为灵活  

13. /*+ use_nl(table_1,table_2) */ 
在多表关联查询中,指定使用 nest loops 方式进行多表关联。

14. /*+ use_hash(table_1,table_2) */ 
在多表关联查询中,指定使用 hash join 方式进行多表关联。 

15./*+ use_merge(table_1,table_2) */ 
在多表关联查询中,指定使用 merge join 方式进行多表关联.

16./*+ parallel(table_name n) */ 
在 sql 中指定执行的并行度,这个值将会覆盖自身的并行度

17./*+ no_parallel(table_name) */ 
在 sql 中指定执行的不使用并行

18./*+ append */
以直接加载的方式将数据加载入库  

19./*+ dynamic_sampling(table_name n) */ 
设置 sql 执行时动态采用的级别,这个级别为 0~10

20./*+ cache(table_name) */ 
进行全表扫描时将 table 置于 LRU 列表的最活跃端,类似于 table 的 cache 属性

21. /*+ HASH_SJ */   /*+ HASH_AJ */ 
通常使用在 Exists,in 子查询中

22. /*+ use_concat */ /*+no_expand*/ 
or 的扩展和不扩展

23./*+NOWRITE*/ 
禁止对查询块的查询重写操作. 
/*+REWRITE*/ 
按物化视图对语句进行重写

24. /*+MERGE(TABLE)*/   /*+NO_MERGE(TABLE)*/ 
能够对视图的各个查询进行相应的合并. 

25. UNNEST 和 NO_UNNEST 
强制 Oracle 将子查询和主查询合并

26.NO_QUERY_TRANSFORMATION
跳过所有查询转换,包括 OR 操作转换、视图合并、子查询和主查询合并、星型转换、物化视图语句重写等。

27./*+push_subq(@tmp)*/ /*+QB_Name(tmp)*/
那么 push_subq 就是为了让子查询最先进行 join。
select /*+push_subq(@tmp)*/ hao1.object_name from 
hao1,hao2,hao4
where hao1.object_name like %a%
and hao1.object_id+hao2.object_id 50
and hao4.object_type=hao1.object_type
and 11 in
(SELECT /*+QB_Name(tmp)*/ hao3.object_id FROM hao3 WHERE hao1.object_id = hao3.object_id);

28./*+push_pred(haoview)*/
接着,我们来使用这里的 hint push_pred 强制优化器将谓词 merge 进 view 中,可见到“VIEW PUSHED PREDICATE”:
select /*+push_pred(haoview)*/ hao3.object_name 
from hao3,haoview
where hao3.object_name=haoview.object_name(+)
and hao3.object_id=999;

29. /*+ pq_distribute */
提示通常被用于提升数据仓库中分区表间的连接操作性能。

30. CURSOR_SHARING_EXACT 
阻止 Oracle 将 SQL 语句中的常量替换为绑定变量.

31.DRIVING_SITE 
强制 Oracle 在 SQL 语句发起的另外一个节点上执行

32.DYNAMIC_SAMPLING 
强制 Oracle 进行动态统计数据采样,采样率参数为 0 到 10,值越大,动态采样数据越多。

33.RESULT_CACHE NO_RESULT_CACHE 
强制 Oracle 将当前查询结果集缓存在 RESULT CACHE 中  

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计2849字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)