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

你可能感兴趣的:(oracle,sql)