|
本帖最后由 sqysl 于 2017-9-13 20:09 编辑
你把不带rownum<50条件的执行计划贴下,你确定结果集只有2000多条?另外,两张表分别有多少数据量?
哦,又仔细看了下,大概明白了。
你不带rownum<50条件,应该是对特定子分区走了FTS,这样结果集2000多很有可能;你加上rownum<50,对主键索引走了INDEX FULL SCAN,主键索引是global的。
如果我上面说的是对的,你可以试试,通过hint让计划走FTS试试,类似这样:
select * from (
select /*+ full(a) */ *
from bdwsps.jk_history_ss1 a
where a.main_prod_id = '10501110'
and a.main_sub_prod_id = '0'
and a.sts = 'C'
AND A.USER_TYPE =99
order by a.jk_history_id) where rownum<50;
如果我上面的推测是对的,加hint后也变快,并且子分区的数据量远大于2000行,那么,你可以考虑把主键索引改为local index(main_prod_id,main_sub_prod_id,jk_history_id),或者另建个local index(sts,user_type)。具体你自己试着看吧,如果觉得加hint和性能可以接受,不改造主键或不新建local index也可以。
|
|