by 도뎡이 [SQL Query] count case when 쿼리 성능 개선 [2023.03.13 10:50:16]
안녕하세요! DB는 큐브리드이고, 쿼리는 다음과 같습니다. select COUNT(CASE WHEN type = 'SU' THEN 1 END) AS SU , COUNT(CASE WHEN type = 'CH' AND ch_type = '1' THEN 1 END) AS CH1 , COUNT(CASE WHEN type = 'CH' AND ch_type = '2' THEN 1 END) AS CH2 , COUNT(CASE WHEN type = 'EV' THEN 1 END) AS EV , COUNT(CASE WHEN type = 'ER' THEN 1 END) AS ER , COUNT(CASE WHEN type = 'PL' THEN 1 END) AS PL from tb_sample
;
type과 ch_type 모두 인덱스가 걸려있는 컬럼입니다.
조건이 포함되지 않는 상황에 어떻게 쿼리의 성능을 개선할 수 있을까요?
선배님들의 피드백 미리 감사드립니다!
-- 오라클 기준으로 힌트 작성해 봤습니다. index fast full scan -- 그룹바이를 2단계로 수행하여 Case 문의 수행 회수를 줄입니다. SELECT NVL(SUM(CASE WHEN type = 'SU' THEN cnt END), 0) su , NVL(SUM(CASE WHEN type = 'CH' AND ch_type = '1' THEN cnt END), 0) ch1 , NVL(SUM(CASE WHEN type = 'CH' AND ch_type = '2' THEN cnt END), 0) ch2 , NVL(SUM(CASE WHEN type = 'EV' THEN cnt END), 0) ev , NVL(SUM(CASE WHEN type = 'ER' THEN cnt END), 0) er , NVL(SUM(CASE WHEN type = 'PL' THEN cnt END), 0) pl FROM (SELECT /*+ INDEX_FFS(tb_sample 인덱스명) */ type, ch_type , COUNT(*) cnt FROM tb_sample GROUP BY type, ch_type ) a ;