Oracle hint 详解(/*+ index(t idx) */)

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) selectinsertupdatedelete 是标识一个语句块开始的关键字,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;
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值