Oracle调优之Hint用法整理笔记

2022-05-07 17:00:11 浏览数 (1)

整理工作中用到的Hint,不定时更新,Hint是oracle早期因为oracle优化器还不是很完善加上去的,可以辅助oracle优化器,Hint 是Oracle 提供的一种SQL语法,常用于SQL调优,通过Hint强行改变Oracle的执行计划,从而实现sql调优

文章目录

代码语言:txt复制
    - [1、/*  result_cache */](https://cloud.tencent.com/developer)
    - [2、/*  connect_by_filtering */](https://cloud.tencent.com/developer)
    - [3、/*  no_unnset */](https://cloud.tencent.com/developer)
    - [4、/*  index(表别名 索引名) */](https://cloud.tencent.com/developer)
    - [5、/*  INDEX_FFS(表别名 索引名) */](https://cloud.tencent.com/developer)
    - [6、/*  INDEX_DESC(表别名 索引名 ) */](https://cloud.tencent.com/developer)
    - [7、/*  INDEX_ASC(表别名 索引名) */](https://cloud.tencent.com/developer)
    - [8、/*  INDEX_COMBINE */](https://cloud.tencent.com/developer)
    - [9、/*  INDEX_JOIN(表别名 索引名) */](https://cloud.tencent.com/developer)
    - [10、/*  ADD_EQUAL 表别名 索引名1,索引名2,... */](https://cloud.tencent.com/developer)
    - [11、/*  ordered use_nl(dept) */](https://cloud.tencent.com/developer)
    - [12、/*  ALL_ROWS */](https://cloud.tencent.com/developer)
    - [13、/* FIRST_ROWS*/](https://cloud.tencent.com/developer)
    - [14、/*  CHOOSE */](https://cloud.tencent.com/developer)
    - [15、/*  RULE */](https://cloud.tencent.com/developer)
    - [16、/*  FULL(TABLE) */](https://cloud.tencent.com/developer)
    - [17、/*  ROWID(TABLE) */](https://cloud.tencent.com/developer)
    - [18、/*  USE_HASH(TABLE) */](https://cloud.tencent.com/developer)
    - [19、/*  no_parallel */](https://cloud.tencent.com/developer)
    - [20、/*  parallel(表别名,并行度) */](https://cloud.tencent.com/developer)
    - [21、/*  ROWID(表名) */](https://cloud.tencent.com/developer)

1、/* result_cache */

设置缓存,特殊业务场景才可以使用

2、/* connect_by_filtering */

强制使用联合型的关联型(CONNECT BY WITH FILTERING)

,ps:详情

见:https://cloud.tencent.com/developer/article/1995288

3、/* no_unnset */

双重否定表示肯定,即让子查询展开,让它嵌套(nest)在里面

4、/* index(表别名 索引名) */

强制索引,有时候可以使用,不过有时候可以关了基数反馈机制

5、/* INDEX_FFS(表别名 索引名) */

对指定的表执行快速全索引扫描,而不是全表扫描的办法

6、/* INDEX_DESC(表别名 索引名 ) */

表明对表选择索引降序的扫描方法

7、/* INDEX_ASC(表别名 索引名) */

表明对表选择索引升序的扫描方法

8、/* INDEX_COMBINE */

为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的布尔组合方式

9、/* INDEX_JOIN(表别名 索引名) */

提示明确命令优化器使用索引作为访问路径

10、/* ADD_EQUAL 表别名 索引名1,索引名2,… */

提示明确进行执行规划的选择,将几个单列索引的扫描合起来

eg:

代码语言:javascript复制
SELECT /* INDEX_FFS(e IN_ENAME,IN_DEPTNO)*/
 *
  FROM emp e
 WHERE e.ename = 'CLERK'
   AND e.deptno = '20';

11、/* ordered use_nl(dept) */

强制使用联合型的关联型(NL),将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表

12、/* ALL_ROWS */

表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化

13、/ FIRST_ROWS/

表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化

14、/* CHOOSE */

表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;

表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;

15、/* RULE */

表明对语句块选择基于规则的优化方法

16、/* FULL(TABLE) */

表明对表选择全局扫描的方法

17、/* ROWID(TABLE) */

提示明确表明对指定表根据ROWID进行访问

18、/* USE_HASH(TABLE) */

将指定的表与其他行源通过哈希连接方式连接起来

19、/* no_parallel */

强制SQL取消并行特性,并行特性有时候很影响系统性能,不要特意使用

20、/* parallel(表别名,并行度) */

并行度是数字的,一般并行特性是比较容易影响系统性能的,不能滥用,除非特殊场景

21、/* ROWID(表名) */

表明对指定表根据ROWID进行访问,ROWID是一个伪列,通过ROWID定位查找速度更快,可以用于SQL调优

0 人点赞