SQL 기초 및 PLSQL 실무 강좌 자료] DECODE 사용시 주의사항


SQL 기초 및 PLSQL 실무 강좌 자료] DECODE 사용시 주의사항


 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



DECODE 사용시 주의사항


* 펼칠 컬럼이 너무 많을때는 먼저 GROUP BY 한 후 처리하라.
  


▶   select dept_no,
         sum(decode(substr(wk_dt,7,2),’01’,amt)) d1,
         sum(decode(substr(wk_dt,7,2),’02’,amt)) d2,
         sum(decode(substr(wk_dt,7,2),’03’,amt)) d3,
         sum(decode(substr(wk_dt,7,2),’04’,amt)) d2,
         ,,,
         sum(decode(substr(wk_dt,7,2),’31’,amt)) d31

▶   select dept_no,
         sum(decode(dd,’01’,amt)) d1,
         sum(decode(dd,’02’,amt)) d2,
         sum(decode(dd,’03’,amt)) d3,
         sum(decode(dd,’04’,amt)) d4, 
         ,,,,
         sum(decode(dd,’31’,amt)) d31
     from ( select dept_no, substr(wk_dt,7,2) dd, sum(amt) amt
            from tab1
            where wk_dt like ‘200401%’
          )
     group by dept_no


▶ COUNT, SUM의 비교
      ① sum(decode(col1,’A’,1,0))
      ② sum(decode(col1,’A’,1))
      ③ count(decode(col1,’A’,1,0))
      ④ count(decode(col1,’A’,1))
      ⑤ count(decode(col1,’A’,’C’))


 ①, ②, ④, ⑤ 는 동일하다.

 ③ 의 결과는 count(*) 과 동일하다.

 ①은 ②보다 불리하다(불필요한 0 연산)

 ②는 ④, ⑤ 보다 불리

 ④, ⑤ 는 동일하다.


 SUM은 COUNT에 비해 30~50% 불리함

 COUNT는 not null 인 경우에만 처리

 COUNT를 사용할 수 있다면 SUM을 사용하지 마라.



* DECODE


□ DECODE 함수와 CASE 문

DECODE 함수 내부에서 DECODE문을 사용하는 경우에는 성능저하 발생
 UNION ALL를 사용할 경우 동일 테이블에 대한 인덱스 스캔이나 테이블 스캔 반복발생으로 성능저하
 Concat(‘||’) 함수로 비교대상컬럼를 묶어서 DECODE 함수의 중복사용을 줄이고, CASE 문으로 비교하는 방식 추천

    (INDEX 주의)


 

+ Recent posts