Programming/SQLP

배치 프로그램 튜닝 방법

초록깨비 2023. 5. 4. 14:31
728x90

1)    스칼라 서브쿼리를 이용한 조인

       Select d.deptno, d.dname,

                  (select sum(sal) from emp where deptno = d.deptno) sum_sal,

                 (select max(sal) from emp where deptno = d.deptno) max_sal

        From dept d

      

      ▶ 스칼라 서브쿼리로 동일 테이블 여러 번 읽을 경우 아래와 같이 변경 합니다

 

     Select d.deptno, d.dname,

                To_number(substr(sal,1,7)) sum_sal,

                To_number(substr(sql, 8,7)) max_sal

      From (

                  Select d.deptno, d.dname,

                             (select lpad(sum(sal),7)||lpad(max(sal),7) from emp where deptno = d.deptno) sal  

                                  ★ 하나로 만드는게 핵심!!!(테이블을 한번만 읽는다)

                   From dept d  

                  )

 

        참고) 스칼라 서브쿼리는 결과 행 수 만큼 반복하므로 매우 비효율적이므로

                복잡한 계산식이나 어쩔 수 없는 경우를 제외하고서는

                 가급적 join으로 풀어서 사용할 수 있게 합니다

                 (테이블 조인이 많다고 느려지는게 아니라는거!!! 아시죠?)

 

2)    One-sql 사용 

        For ~ loop로 읽어서 update or insert할 때 -> merge문 사용으로 변경

 

       For

 

       Loop

  

           If ~~

 

               Insert  or  update

       End loop

 

 

    ▶  merge문으로 변경

 

        merge into target_table

         using ( selelct ~

                   )

         On ( 조건문 )

             When matched then

                   Update

                      Set

             When not matched then

                   Insert

                    Into

 

3)    or 조건을 union all로 변환하기!

       select *

        from emp

       where sql = 3000

              or deptno = 200 ;

 

     ▶ 쿼리 변환

          Select * from emp

          Where sql = 3000

 

         Union all

 

        Select * from emp

        Where deptno = 200

            And lnnvl(sal = 3000) ;

 

4)    인덱스 변경 및 힌트 적용

 

5)    기타 사항

      ◆ 인덱스 사용이 불가능 한 경우

           좌변 컬럼 가공

          부정 연산자 사용 (not …)

           null검색  

          묵시적 형변환

 

728x90