본문 바로가기

04번. IT 힌트얻기/▶ DB Tuning

[Tuning] 분석함수의 활용 (셀프조인의 해결)

분석함수의 활용 (셀프조인의 해결)

사용자가 요구하는 리포트의 특성 또는 테이블의 설계적인 특성
으로 인한  Self-Join 상의 과부하적인 부분을 해소할 수 있는
방안이 있습니다. 특히 이번 예제에서는 Self-Outer Join에 대
해 사용할 수 있는 분석용 함수를 알아 보고자 합니다.

- 인덱스정보
DANGA_HIST_PK    : CODE + SEQ_NO

(Self-Join이면서 아우터 조인 형태)
SELECT A.CODE, A.SEQ_NO, A.PRICE,
       A.BEGIN_YMD, NVL(B.BEGIN_YMD,'99991231') END_YMD
  FROM DANGA_HIST A, DANGA_HIST B
 WHERE A.CODE = B.CODE(+)
   AND A.SEQ_NO + 1 = B.SEQ_NO(+);

(LEAD() OVER() 함수 적용)  -- 직후 데이터
SELECT CODE, SEQ_NO, PRICE, BEGIN_YMD,
       LEAD(BEGIN_YMD,1,'99991231')
       OVER(PARTITION BY CODE
            ORDER BY CODE ASC,SEQ_NO ASC) END_YMD
  FROM DANGA_HIST;
SELECT CODE, SEQ_NO, PRICE, BEGIN_YMD,
       LEAD(BEGIN_YMD)
       OVER(PARTITION BY CODE
            ORDER BY CODE ASC,SEQ_NO ASC) END_YMD
  FROM DANGA_HIST;


LAG() OVER()                -- 직전 데이터

SELECT CODE, SEQ_NO, PRICE, BEGIN_YMD,
       LAG(BEGIN_YMD,1,'99991231')
       OVER(PARTITION BY CODE
            ORDER BY CODE ASC,SEQ_NO ASC) END_YMD
  FROM DANGA_HIST;
SELECT CODE, SEQ_NO, PRICE, BEGIN_YMD,
       LAG(BEGIN_YMD)
       OVER(PARTITION BY CODE
            ORDER BY CODE ASC,SEQ_NO ASC) END_YMD
  FROM DANGA_HIST;