여러 고수님들의 의견을 듣고 싶습니다. 0 3 463

by 왕보초 [DB 기타] DB2 쿼리 [2022.01.06 10:27:09]


안녕하세요. 여러 고수님들의 의견을 듣고 싶습니다.

 

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이 더 있습니다.

by 창조의날개 [2022.01.06 11:10:21]

WHERE 조건이 없으므로 FULL SCAN 하기 때문에 오래 걸리겠죠

AMT를 SUM 하는 것으로 보아 금액 합계를 구하는 것으로 보입니다.

데이터가 많아서 오래 걸리기 때문에 월별 또는 일별 중간 집계 테이블을 만들어 두시면 좋습니다.

 

각 CODE를 기준으로 GROUP BY 하여 중간 집계 테이블에 저장해두는 배치 프로그램을 만들어 두시면

합계가 필요할때 집계 테이블과

아직 집계되지 않은 데이터는 원본 테이블에서 SUM 해서

더해줘야 빠르게 결과를 도출 할 수 있습니다.

 

당연히 전제 조건으로 집계 테이블에 저장된 데이터의 AMT 값은 변동이 없어야 합니다.

만약 최근 한달전까지의 데이터가 변동이 있다면

집계 테이블에는 두달전까지만 넣어 두고

한달전 데이터부터 현재까지 데이터의 SUM은 원본 테이블에서 구해야 합니다.

이때 원본 테이블에는 필요한 데이터만 추출하는 기준일자 컬럼에 대해 INDEX를 만들어 주어야 합니다.

 


by 마농 [2022.01.06 12:38:57]

쿼리의 일부만 보고 판단하기 어렵습니다.


by 우리집아찌 [2022.01.06 18:00:08]

테이블이 아니라 view 이시면 테이블 정보도 알아야할것 같네요

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