ABAP DUMP ERROR 24시

온라인 프로그램에서의 JOIN, 언제 사용할까? 본문

카테고리 없음

온라인 프로그램에서의 JOIN, 언제 사용할까?

이운형 2023. 4. 24. 09:03
반응형

1. 온라인 프로그램(대중적인 프로그램)

소량의 DATA를 읽고, 소량의 DATA를 갱신하기 때문에 JOIN을 사용한다.

= (JOIN을 사용한다는 의미는 INDEX를 사용한다는 의미와 같다).

2. BATCH 프로그램(대용량 업로드 프로그램)

대량의 DATA를 읽고, 대량의 데이터를 처리한다.

전체범위 처리 기준으로 튜닝을 진행해야 하므로 FULL SCAN 혹은 HASH JOIN을 사용해야한다.

Q. 어떨 때 JOIN을 사용해야 효과적일까?

-결론 : 1개의 값을 정확하게 구별할수 있는 INDEX 혹은 KEY값이 있을때 JOIN의 성능은 극대화 된다.

예시) 실명확인번호로 조회한 실명확인번호

최근 1년 이내의 변경 이력 중,

전월 말일 데이터를 출력하는 쿼리.

select c.고객번호, c.고객명, h.전화번호, h.주소, h.상태코드, h.변경일시
from 고객 as c, 고객변경이력 as h
where c.실명확인번호 = :rmnno         "여기를 주목
   and h.고객번호 = c.고객번호
   and h.변경일시 = (select max(변경일시) 
                            from 고객변경이력 m
                           where 고객번호 = c.고객번호 
                              and 변경일시 >= trunc(add_months(sysdate, -12), 'mm')
                              and 변경일시 < trunc(sysdate, 'mm'))

예시) 실명확인번호로 조회한 고객구분코드

최근 1년 이내의 변경 이력 중,

전월 말일 데이터를 출력하는 쿼리.

select c.고객번호, c.고객명, h.전화번호, h.주소, h.상태코드, h.변경일시
from 고객 as c, 고객변경이력 as h
where c.고객구분코드 = 'A001'            " "여기를 주목
   and h.고객번호 = c.고객번호
   and h.변경일시 = (select max(변경일시) 
                            from 고객변경이력 m
                           where 고객번호 = c.고객번호 
                              and 변경일시 >= trunc(add_months(sysdate, -12), 'mm')
                              and 변경일시 < trunc(sysdate, 'mm'))

여기서 핵심 차이는

특정 고객(유니크한 Key값 =DB에서 자기자신을 구별할수 있는 유일 값) 으로 설정을 하는것인지, 특정 범주값(Key값이나 그 key만으로 자신을 구별할 수 없을 때) 으로 설정하는 것인지

꼭 확인해 봐야 한다.

유니크한 Key 값은 소량의 값이므로 INDEX와 JOIN을 사용해야하며,

일반 KEY 값으로 검색한다면 전체 TABLE을 다 읽고, 처리를 해야하므로 성능의 저하가 온다.

반응형
Comments