파티션 테이블 조회관련 문의드립니다. 0 2 904

by DB 꿈나무 [Oracle 기초] [2019.04.05 11:27:55]


20190405_112536.png (42,501Bytes)

안녕하세요. 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

by 마농 [2019.04.05 12:45:34]

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, 날짜
;

 


by DB 꿈나무 [2019.04.05 13:11:56]

아 감사합니다 무슨 말씀인지 알았습니다. 불필요한 조건이 들어가서 그렇군요 마농님 말씀처럼 구지 디코드로 1을 만들어서 썸을 할필요없이 단순 카운터만해도 같은값인데.. 단순한 쿼리를 제가 너무 난잡하게 짯네요 항상 매번 감사드립니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입