안녕하세요~아밥 초보입니다..
제가 ERP튜닝을 배우면서 하고있는데 테이블 JOIN순서를
변경해서 프로그램 성능을 향상시키고자 했는데 조인순서를 변경시켰습니다. 아래 보시면
조인하는 테이블의 위치를 바꿔줬는데 첫번째 결과값에 비해 두번째
결과값이 덜나옵니다.. 조인순서는 결과에 영향을 안미친다고 알고있는데
뭐가문제인지 알려주시면 감사하겠습니다..
아래는 코드입니다.
1번.
SELECT B~KUNAG A~VGTYP A~VGBEL A~AUBEL A~AUPOS A~WERKS
A~MATNR A~ARKTX B~FKDAT
SUM( A~FKIMG ) A~VRKME
SUM( A~NETWR ) B~WAERK C~ZEARRPT
INTO TABLE IT_TMP
BYPASSING BUFFER
FROM ( VBRP AS A JOIN VBRK AS B
ON A~VBELN = B~VBELN ) JOIN VBAK AS C
ON A~AUBEL = C~VBELN
WHERE A~WERKS IN S_WERKS
AND B~KUNAG IN S_KUNAG
AND B~FKDAT IN S_FKDAT
AND B~WAERK IN S_WAERK
AND B~SFAKN EQ ''
AND B~FKSTO EQ ''
AND B~BUKRS EQ P_BUKRS
AND C~SPART IN S_SPART
AND C~VTWEG IN R_VTWEG
AND C~AUART IN R_AUART
GROUP BY B~KUNAG A~VGTYP A~VGBEL A~AUBEL A~AUPOS A~WERKS A~MATNR
A~ARKTX B~FKDAT A~VRKME B~WAERK C~ZEARRPT .
2번. 변경후
SELECT B~KUNAG A~VGTYP A~VGBEL A~AUBEL A~AUPOS A~WERKS
A~MATNR A~ARKTX B~FKDAT
SUM( A~FKIMG ) A~VRKME
SUM( A~NETWR ) B~WAERK C~ZEARRPT
INTO TABLE IT_TMP
BYPASSING BUFFER
FROM VBAK AS C JOIN VBRP AS A
ON C~VBELN = A~AUBEL JOIN VBRK AS B
ON B~VBELN = A~VBELN
WHERE A~WERKS IN S_WERKS
AND B~KUNAG IN S_KUNAG
AND B~FKDAT IN S_FKDAT
AND B~WAERK IN S_WAERK
AND B~SFAKN EQ ''
AND B~FKSTO EQ ''
AND B~BUKRS EQ P_BUKRS
AND C~SPART IN S_SPART
AND C~VTWEG IN R_VTWEG
AND C~AUART IN R_AUART
GROUP BY B~KUNAG A~VGTYP A~VGBEL A~AUBEL A~AUPOS A~WERKS A~MATNR
A~ARKTX B~FKDAT A~VRKME B~WAERK C~ZEARRPT.
댓글 4
-
달타냥83
2011.02.17 02:13
-
양키
2011.02.18 00:17
VBAK 영업문서 헤더 T1
VBRK 대금청구문서헤더 T2
VBRP 대금청구문서품목 T3
일단 영업문서와 대금청구문서는 상관관계는 있지만 영업문서가 있다고해서 대금청구문서도 같이 생기는 개념은 아니므로
OUTTER JOIN을 걸어야 할것 같습니다. 아래와 같은 조건이 맞을듯 합니다만.
상황에 따라 For all entries 구문을 사용하는것도 괜찮을듯 보입니다.
================================================
from VBAK as t1
LEFT OUTER JOIN VBRK as t2
on t1~vbeln = t2~vbeln
inner join vbrp as t3
on t2~vbeln = t3~vbeln.
-
ABAPCHOJJA
2011.02.18 22:30
잘은 모르지만... 왼쪽테이블 검색기준으로 오른쪽을 조인하고 조건이 적용이 될 거예요.
영업 프로세스는 오더 생성이 된 데이터에 대하여 빌링문서가 만들어지기 때문에
위 2개의 셀렉트는 다른 결과를 보여줄 수 있을 수 있을 것 같네요.
양키님 말씀처럼 left 조인을 하시거나 영업문서를 기준으로 빌링문서를 조인하시는
것이 맞을 것 같습니다. 1번은 빌링 기준으로 영업문서를 조회하는 것이고
2번은 영업문서 기준으로 빌링문서를 조회하여 결국 조건에 해당하는 영업문서
모두가 빌링이 되었을 경우에 1번과 2번이 같다고 볼 수 있겠네요. ^^ 수고하세요.
-
밥~~
2011.02.19 22:19
키값에 해당하는 필드를 select 구문에 넣어시고 internal table에도 키를 넣어보심이..
저두 초보지만..제생각엔..
여러개 테이블을 inner join할때 결합조건 값이 다 존재하면 순서와 상관없겠지만..
만약에 결합조건의 값이 없는 경우가 발생하면 순서의 영향을 받을 것입니다.. 그 이후의 join효과는 없어지니까..해당 필드도 나오지 않겠죠?/