Select 튜닝에 대해서 문의드립니다.

안녕하세요..


 


막대한 양의 데이타를 조회하는 것두 아니고, 단지 데이타가 많은 테이블을


조회한다는 이유로 Select 시간 겁나게 걸리네요..


 


Select 문은 다음과 같네요


 


* 아래 쿼리문 Select 하는 데 걸리는 시간 : 약 3분 2초


  SELECT  a~charg a~mblnr b~budat c~ebeln c~ebelp c~effwr
          c~menge d~knumv d~waers d~wkurs d~lifnr
          INTO CORRESPONDING FIELDS OF TABLE gt_postk
          FROM mseg AS a
          JOIN mkpf AS b
            ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr
          JOIN ekpo AS c
            ON a~ebeln = c~ebeln AND a~ebelp = c~ebelp
          JOIN ekko AS d
            ON c~ebeln = d~ebeln
           FOR ALL ENTRIES IN gt_bill
         WHERE a~charg = gt_bill-charg
           AND ( a~bwart = ‘101’
              OR a~bwart = ‘545’ ).


 


* 아래 쿼리문 Select 하는 데 걸리는 시간 : 약 2분 36초


  SELECT  a~charg a~mblnr b~budat
          APPENDING CORRESPONDING FIELDS OF TABLE gt_postk
          FROM mseg AS a
          JOIN mkpf AS b
            ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr
           FOR ALL ENTRIES IN gt_bill
         WHERE a~charg = gt_bill-charg
           AND a~bwart = ‘561’.


 


gt_bill에는 66건의 데이타가 있습니다.


 


위의 퀴리문을 실행하는 데 무려 약6분이 걸리네요..


 


좀 더 빠르게 데이타를 가져올 수는 없을까요?


 


첫 번째 Select문에서 join된 PO 테이블(EKKO, EKPO)을 분리하면 좀 더 괜찮을 까요?


 


고수님들의 부탁드립니다.


 


6분이라….휴~~~실행하고 담배하나 피고 들어오면 될러나…


 


7 Comments

avatar

소견으로는

gt_bill 건수가 많지 않으니..

두개다  range 변수로 사용해서 in 구문으로 사용하는게 좋을거 같은데요.

 

for all entry는

select ~ endselect 를 loop 처리하면서 처리합니다. 위 구문에서 인터널테이블 66개니 66번 도는거죠.

 

range 변수는 한번에 select 합니다. select ~ where charg eq ‘1’ or eq ‘2’ eq 3~~ 이런식으로 해석해서 수행되죠.

 

어느게 빠른지 테스트 해보시고 리턴 부탁드립니다.

avatar

where 조건에 키값이 하나도 없네요..

인덱스를 잡으시던가

아니면 최소한 연도라도 주면 나아지지 않을까요??

avatar

저도 강진규님 생각과 같습니다…

키값이 전혀 없네요…

 

그런데 for all entry가 select ~ endselect 보다 빠르지 않나요???

튜닝시 디비 접근 횟수를 줄이는 것도 중요시 생각합니다…

위와 같이 조건이 광범위 하게 잡혀 있을시…

loop~endloop 돌며 select ~ endselect 처리하면 오히려 더 느려질것 같군요…

avatar

For all entries in 강추! Where 절에 index 조건 초 강추… 개발 서버와 운영서버에서의 데이터 핸들링 시 index 의 힘을 느끼시게 될겁니다. 열심히 하세요

avatar

e-abap님, 강진규님,鵬의 날개님,dams80님 답변 고맙습니다.

Index를 어떻게 잡아야 하는 지, 해본 적이 없어서리..ㅠ.ㅠ;…

dams80님 저두 Index의 힘을 느끼게 해주세염…..

avatar

인덱스 생성시 필드의 순서에는 영향을 받지 않는지 궁금하네요..

인덱스를 타지 않는 경우가 종종 발생을 하는 건 어찌된 일인지..

Leave a Reply