Без дополнительных подробностей, таких как план выполнения и полные сведения о таблицах, индексах, объемах и распределении данных, я не знаю, с какими проблемами производительности вы сталкиваетесь. Тем не менее, я мог бы начать с чего-то вроде этого:
declare
p_from_date date := date '2018-01-01';
p_to_date date := date '2018-02-01';
myddl long := 'create table c1_lan_gtt_1 nologging parallel 4 as
select /*+index(c cr_decision_m_cd1)*/ a.agreementid,
a.agreementno, a.lesseeid, a.productflag, a.app_formno, a.amtfin
from lea_agreement_dtl a
join cr_decision_m c on c.appid = a.agreementid
where a.status = ''A''
and c.authdate between date ''' || to_char(p_from_date,'YYYY-MM-DD') || '''' ||
' and date ''' || to_char(p_to_date,'YYYY-MM-DD') || '''';
begin
dbms_output.put_line(myddl);
end;
, который генерирует
create table c1_lan_gtt_1 nologging parallel 4 as
select /*+index(c cr_decision_m_cd1)*/ a.agreementid,
a.agreementno, a.lesseeid, a.productflag, a.app_formno, a.amtfin
from lea_agreement_dtl a
join cr_decision_m c on c.appid = a.agreementid
where a.status = 'A'
and trunc(c.authdate) between date '2018-01-01' and date '2018-02-01'
Редактировать: , так как индекс CR_DECISION_M_CD1
включен (APPID, TRUNC(AUTHDATE))
(из комментариев) Я восстановил функцию trunc()
, хотя по логике она не нужна.