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