test8

原始的查询SQL如下:
select  *
from
sm_histable0622 
where  destaddr = '8613423715374' And Final >'2007-6-27'
And orgaddr = '1860' and Expire<'2007-8-27'

在这个SQL中红色部分(index in1)和蓝色部分字段(index in2)是两个组合索引,但Oracle 只能利用到一个索引,如下:


但表中的记录很多时这个原始查询很慢。有没有办法让查询使用到两个索引呢?

Oracle Hint是一种让DBA自行指定优化器的行为的方法,当优化器的优化结果不能满足我们的要求时我们可以通过Hint的方法人为地指定查询计划。
理论上一个优秀的优化器是不用人去干预它的行为,但"智者千里必有一失" ,有时优化器也不是万能的,
也需要人的智慧去补充其行为,Hint就是这个最后的银弹。
Hint行为有多种方式,具体的Hint 可以查询Oracle的相关的文档。
使用Oracle hint 之后就可以使用到两个索引,从而使查询效率大幅提高 。

select  /*+index_combine(a in1 in2)*/*
from
sm_histable0622  a
where  destaddr = '8613423715374' And Final >'2007-6-27'
And orgaddr = '1860' and Expire<'2007-8-27'

 

经过测试,使用Hint之后的速度比原来提高了50倍左右。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值