안녕하세요. 여러 고수님들의 의견을 듣고 싶습니다.
Select usr_name , SUM(CASE WHEN GB_CODE = 'A0001' AND GOOD_CODE = '1111' THEN AMT END) AS sums_01 From view01
이런식으로 CASE 이용한 SUM을 하면 시간이 오래 걸리는데... 좋은 개선 방법이 있나요??
참고 DB는 DB2 사용하고 있구요... 위에 SUM 방식으로 10개정도 SUM이 더 있습니다.
WHERE 조건이 없으므로 FULL SCAN 하기 때문에 오래 걸리겠죠
AMT를 SUM 하는 것으로 보아 금액 합계를 구하는 것으로 보입니다.
데이터가 많아서 오래 걸리기 때문에 월별 또는 일별 중간 집계 테이블을 만들어 두시면 좋습니다.
각 CODE를 기준으로 GROUP BY 하여 중간 집계 테이블에 저장해두는 배치 프로그램을 만들어 두시면
합계가 필요할때 집계 테이블과
아직 집계되지 않은 데이터는 원본 테이블에서 SUM 해서
더해줘야 빠르게 결과를 도출 할 수 있습니다.
당연히 전제 조건으로 집계 테이블에 저장된 데이터의 AMT 값은 변동이 없어야 합니다.
만약 최근 한달전까지의 데이터가 변동이 있다면
집계 테이블에는 두달전까지만 넣어 두고
한달전 데이터부터 현재까지 데이터의 SUM은 원본 테이블에서 구해야 합니다.
이때 원본 테이블에는 필요한 데이터만 추출하는 기준일자 컬럼에 대해 INDEX를 만들어 주어야 합니다.