1 概述
1. hint 解释
(1) 翻译过来是 "提示、暗示" 的意思
(2) 在 Oracle 中指:让优化器按照指定的方式生成 '执行计划'
2. 优劣分析
好处:可以 '人工干预' Oracle 的执行计划
坏处:'执行计划固定',不会随着数据等变化而自动生成更优的执行计划
3. 适用情况
(1) 临时查询数据
4. 注意
(1) hint 和 注释很像,区别在于 '/*+' 中是否紧跟着 '+'
(2) 若 hint 语法有误,不会报错,只是不会起任何效果
5. 如何判断 hint 是否起作用了呢?
(1) 添加 hint 前后的执行计划 cost 一般是不一样的哦,观察下即可
2 用法
select /*+ index(t pk_emp) */ * from ...
关键词解释:
(1) select、insert、update、delete 是标识一个语句块开始的关键字,hint 只能出现在这些关键字后面,否则无效
(2) '+':表示该注释是一个提示,必须紧跟 '/*' 的后面并且中间 '不能有空格',如:'/*+'
(3) 't':表别名,若没有,则为表名
(4) 'pk_emp': 索引名
说明:'大小写不敏感'
-- 强制走索引,索引名称为: pk_emp
select /*+ index(t pk_emp) */ * from scott.emp t where t.empno = 7369;
-- 强制全表扫描
select /*+ full(t) */ * from scott.emp t where t.empno = 7369;
-- 并发
select /*+ parallel(2) */ from scott.emp t where t.empno = 7369;
效果图:
3 扩展
3.1 hint 列表
-- 查询所有 hint 信息
select * from v$sql_hint t order by t.class, t.name;
3.2 多表连接中的 hint
-- 格式 /*+ hint1 hint2 ...*/
select /*+ full(d) index(d pk_dept)*/e.*,
d.*
from scott.emp e,
scott.dept d
where d.deptno = e.deptno;