oracle 优化学习笔记_hint

文章目录

  • 1.用法
  • 2.被忽略的常见情况
  • 3.常见hint
    • 3.1 与优化器模式相关的
    • 3.2 与表访问相关
    • 3.3 与索引访问相关

1.用法

语法:/*+ <具体的hint内容> */
位置:紧接着select|insert|update|dalete|merge 后
范围:仅限于它本身所在的query block(跨范围访问需要@指定范围)

SCOTT@regan> select /*+ full(emp) */ * from emp where empno=7369;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    38 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    38 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

注意:
指定具体对象时,不能带上该对象所在的schema
指定具体表名时,若该表在对应sql文本中有别名,则应该使用对应的别名
当隐含参数 _OPTIMIZER_IGNORE_HINTS=true 时,会忽略所有hint

2.被忽略的常见情况

  • 使用的hint有语法或者拼写错误
  • 使用的hint无效
  • 使用的hint自相矛盾
  • 使用的hint受到了查询转换的干扰
  • 使用的hint受到了保留关键字的干扰

3.常见hint

3.1 与优化器模式相关的

  • ALL_ROWS
  • FIRST_ROWS(n)
  • RULE

3.2 与表访问相关

  • FULL
  • ROWID

3.3 与索引访问相关

  • INDEX
  • NO_INDEX
  • INDEX_DESC
  • INDEX_COMBINE-位图布尔运算
  • INDEX_FFS

你可能感兴趣的:(tuning)