테이블 업데이트 하는 프로그램을 하나 만들었는데
퍼포먼스가 많이 떨어집니다.
그래서 수정을 하려고 합니다.
좀 부탁 드리겠습니다.
REPORT ZDSD_A4KHT_TABLEUPDATE.
tables: zsdt8313.
data : it_01 like zsdt8313 occurs 0 with headeR line.
select *
from zsdt8313 into table it_01
WHERE
* SALEDATE = '20080501'
* and RECPATCOD = '409'
SALMONONE like '(%'.
loop at it_01.
CALL FUNCTION 'STRING_REPLACE'
EXPORTING
PATTERN = '('
SUBSTITUTE = ''
CHANGING
TEXT = it_01-SALITMNUM.
CALL FUNCTION 'STRING_REPLACE'
EXPORTING
PATTERN = ')'
SUBSTITUTE = ''
CHANGING
TEXT = it_01-SALITMNUM.
it_01-SALITMNUM = it_01-SALITMNUM * -1.
CALL FUNCTION 'STRING_REPLACE'
EXPORTING
PATTERN = '('
SUBSTITUTE = ''
CHANGING
TEXT = it_01-SALMONONE.
CALL FUNCTION 'STRING_REPLACE'
EXPORTING
PATTERN = ')'
SUBSTITUTE = ''
CHANGING
TEXT = it_01-SALMONONE.
it_01-SALMONONE = it_01-SALMONONE * -1.
MODIFY IT_01.
ENDLOOP.
UPDATE zsdt8313 FROM TABLE it_01.
아무래도 맨 마지막에 업데이트 문이 문제인것 같은데
좀 부탁 드립니다.
댓글 4
-
금은돌
2009.04.06 18:53
-
정군
2009.04.06 20:41
update가 한번에 일어나도록 하신 것은 맞는 것 같습니다만...
필요한 필드만 update하도록 하는게 좋겠습니다.
현재 전체 필드를 다가져와서 하고 있기 때문에 원하는 필드만 업데이트 하는 것 보다는 훨씬 느릴 것으로 생각됩니다.
update zsdt8313 set field_name = value
where key_field = value_key
가 좀 나을 듯 합니다.
loop을 도는 문제가 있지만 it_01의 필드수가 많다면..
저게 나을 듯 합니다.
좀 더 확실하게 하시려면 ST05에서 trace를 뜨셔서 execution plan 등을 확인해 보는게 좋을 것 같습니다.
index가 제대로 먹고 있는지, update로 했지만 한번에 안되는 건 아닌지 등...
그다지 도움이 안되는 원론적인 이야기가 아닌가 모르겠네요...
-
Bizzard.Chul
2009.04.07 20:51
UPDATE zsdt8313 FROM TABLE it_01. 하지 말고
MOdify zsdt8313 FROM TABLE it_01. 해보세요..
-
망울
2009.04.14 18:39
감사합니다. 해결하였습니다.
음..저같으면 모디파이할때 변경하는것만 하구
업데이트는 루프할때마다 디비에 접근하는것 보다는 저렇게 루프 밖에서 하는게 좋을듯한게 제 생각인데.. .
'-'; 루프안에서 set으로 특정필드만 바꾸시던지.. 한번 실험해보세요~