Oracle еше одна проблема. чтоб им.
От: зиг Украина  
Дата: 28.04.15 09:55
Оценка:
Внимание, опубликую и запрос и ПЛАН сразу. хрен вам они помогут только гагага.
Итак, проблема следующая. есть Запрос, который работает медленно если в первый раз запускаешь. Вторые и последующие запуски (даже с изменением параметров запроса) уже более-менее быстрые — то есть видать что-то там оракл кладет в кэш. Хотелось бы чтоб запрос работал более стабильно!
План вообще какой-то неинформативный как по мне — кост очень небольшой. То есть непонятно что там улучшать, оно типа и так все хорошо.
Запрос:
select B.* from (select A.*, rownum as rn  from (select  C.COMPANYNAME, C.COMPANYID as CLIENT, P.INSTRUMENT, P.VALID_FROM, P.FREQUENCY, P.DETAILEDFREQUENCY, cf.VAL_DATE ,
(select max(vv.val_date)        from tableE vv
  where vv.REQUEST = p.PKEY and vv.VALID = 'Y' and vv.dealer=8
  ) as ASOF  from tableN c
 inner join tableD dp on c.companyId=dp.companyId and dp.dealer=8
 inner join tableC p on p.VALID = 'Y' and p.SINGLE = 'Y' and  p.OWNER = c.COMPANYID
 inner join VM_CALENDAR_FREQUENCIES cf on cf.FREQUENCY=p.FREQUENCY and cf.DETAILEDFREQUENCY=p.DETAILEDFREQUENCY and cf.VAL_DATE between '20150427' and '20150427' and cf.REGIONALHUB in ('ALL',c.REGIONALHUB)
 inner join VM_IDS i on i.ID_KEY = P.INSTRUMENT and i.VALID = 'Y'
 inner join tableA b on i.BOND = b.PKEY and b.VALID = 'Y'
 inner join tableB_DEFAULT_PERMS pd on pd.dealer=12584 and pd.VALID ='Y' and
        (pd.START_DATE is null or '20150427' > pd.START_DATE) and(pd.END_DATE is null or '20150727' < pd.END_DATE)
  and pd.client=p.owner and ( (pd.bond_type=b.type and pd.bond_type in ('Sov','Corp','StatBody')) or (  pd.bond_type = 'Unclassified' and (b.type not in ('Sov','Corp','StatBody')  or b.type is null ) ) )  left outer join tableB_REQUEST_PERMS pm on pm.instrument = p.instrument and pm.CLIENT = p.owner
      and pm.DEALER = 12584 and pm.VALID = 'Y' and pm.request_id=p.pkey  and (pm.START_DATE is null or '20150427' > pm.START_DATE) and(pm.END_DATE is null or '20150427' < pm.END_DATE) where (c.ISCURRENT = 'Y' and c.ISDEALER = 'N' and c.REGIONALHUB in ('BLA', 'BLU', 'BLE', 'BBB', 'YY')) and ((pm.permission in ('A','B','M','Y') ) or ( (pm.permission is null or pm.permission ='P') and (pd.permission in ('A','B','M','Y') ) )) order by c.COMPANYNAME Asc nulls first  , c.COMPANYNAME, cf.VAL_DATE asc ) A  where  rownum <= 30) B  where  rn > 1


  План (частичка, ибо длинный):
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.