`
aben_liu
  • 浏览: 26572 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

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倍左右。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics