
执行sql如下:
select *
from lm3.cc03
where aae017 in (
select distinct natl.jgid
from be3.agency_natl natl,
be3.agency_config conf
where natl.jgid = conf.jgid
and conf.ywlb = '02'
start with natl.jgid = '37100106'
connect by prior conf.jgid = conf.sjjgid
)
and aae036 >= to_date('20130101', 'yyyyMMdd')
lm3.cc03表中有aae017和aae036 的组合索引,也有aae036 的单独索引。
但是执行以上sql时,lm3.cc03检索用不上索引,为什么?
哪位大侠给指导一下,谢谢!
------解决方案--------------------
用不上索引可能性很多。
1、aae036 >= to_date('20130101', 'yyyyMMdd') 是否范围过大了。现在是2014年呀。
2、aae017 in 是不是很多,占有比例很大
3、当然还有其他原因:类型是否匹配。是否分析过表等等
4、先缩小范围。再说用哪个索引的问题:这两个索引,应该会有时oracle整不明白。你看看能否缩成一个。
联合索引,以036为第一个列