안녕하세요. DB초보자입니다 이건 제가 간단하게 짠 쿼리인데 TB_BMH_RUNEVTCOLL 테이블이
데이터양이 방대해서 현재 파티션으로 하루씩 나누어져 있습니다.
그냥 단순하게 아래 쿼리로 돌리면 결과값이 2시간후에나 나옵니다. ㅠㅠ
파티션을 이용하여 1월한달치 내용만 뽑아서 조금더 빠르게 결과값을 나타내고싶은데
파티션자체가 월별이 아닌 일별로 되어있어서 어려움이 있습니다. 조언부탁드립니다.
파티션 내용 첨가하였습니다.
select 날짜,정류소명,정류소단축ID,정류소ID, sum(통과대수) as 통과대수 -- 일별 시간별 정류소 통과대
from (select
TO_CHAR(TB_BMH_RUNEVTCOLL.EVT_OCCURDT, 'YYYY-MM-DD HH24') as 날짜,
TB_ADM_BUSSTOP.BSTOPNM as 정류소명,
TB_ADM_BUSSTOP.SHORT_BSTOPID as 정류소단축ID,
TB_ADM_BUSSTOP.BSTOPID as 정류소ID,
decode(TB_BMH_RUNEVTCOLL.EVTSUBTPCD, 2, '1') as 통과대수
from
TB_BMH_RUNEVTCOLL,
TB_ADM_BUSSTOP
where TB_BMH_RUNEVTCOLL.NODEID = TB_ADM_BUSSTOP.BSTOPID
and TB_BMH_RUNEVTCOLL.EVTSUBTPCD = 2
and TB_BMH_RUNEVTCOLL.EVTTPCD = 21
and TB_ADM_BUSSTOP.USEYN = 1
and TB_ADM_BUSSTOP.BSTOPID like '16%'
--and TB_BMH_RUNEVTCOLL.NODEID = 164000622
and EVT_OCCURDT BETWEEN
TO_DATE('2019-01-01' || '' || '00', 'YYYY-MM-DD HH24') AND
TO_DATE('2019-01-31' || '' || '23', 'YYYY-MM-DD HH24')
order by 3,1)
group by 날짜,정류소명,정류소단축ID,정류소ID
order by 3,1
evtsubtpcd = 2 조건을 Where 절에 줬으므로 Decode 는 불필요합니다.
인라인뷰 안의 정렬은 불필요합니다.
이게 속도저하의 원인이 아닐까 생각되네요.
인라인 뷰 안의 order by 구문을 제거해 보세요.
SELECT TO_CHAR(a.evt_occurdt, 'yyyy-mm-dd hh24') AS 날짜 , b.bstopnm AS 정류소명 , b.short_bstopid AS 정류소단축ID , b.bstopid AS 정류소ID , COUNT(*) AS 통과대수 FROM tb_bmh_runevtcoll a , tb_adm_busstop b WHERE a.nodeid = b.bstopid AND a.evtsubtpcd = 2 AND a.evttpcd = 21 AND b.useyn = 1 AND b.bstopid LIKE '16%' -- AND a.nodeid = 164000622 AND a.evt_occurdt >= TO_DATE('2019-01-01', 'yyyy-mm-dd') AND a.evt_occurdt < TO_DATE('2019-01-31', 'yyyy-mm-dd') + 1 GROUP BY TO_CHAR(a.evt_occurdt, 'yyyy-mm-dd hh24') , b.bstopnm , b.short_bstopid , b.bstopid ORDER BY 정류소단축ID, 날짜 ;