안녕하세요.
오랜만에 글을 남기는 것 같군요..
Loop문과 Read문에 대해 성능이 어떤 구문이 좋은 지..
다음과 같은 구문이 있다고 하면...
lt_test 에는 적게는 10개 많게는 100건 정도의 데이타가 저장될 수 있습니다.
LOOP AT lt_test INTO ls_test.
CASE ls_test-zname.
WHEN 'AAA'.
"Itab 변수에 값 저장
WHEN 'BBB'.
"...
WHEN 'CCC'.
"...
WHEN 'DDD'.
"...
ENDCASE.
ENDLOOP.
이 있고 요것을 Read 문으로 구현 한다면
CLEAR ls_test.
READ TABLE lt_test INTO ls_test WITH KEY zname = 'AAA'
BINARY SEARCH.
IF sy-subrc EQ 0.
"....
ENDIF.
CLEAR ls_test.
READ TABLE lt_test INTO ls_test WITH KEY zname = 'BBB'
BINARY SEARCH.
IF sy-subrc EQ 0.
"....
ENDIF.
.....
이 되겠죠..
여기서 Loop문과 Read문으로 각각 했을 경우 어떤 구문이 더 성능이 좋을까요?
댓글 5
-
도련님
2010.04.22 01:03
-
you1228
2010.04.22 02:14
대량의 데이터이고 조건이 많지 않다면 Read문이 훨씬 빠르겠구요..
loop문을 안쓰고 read문으로만 .....조건이 AAA~ZZZ 이렇게 많다면 코딩 노가다가 될수도있겠네요..
-
덩콘
2010.04.22 17:59
소량이라면 속도차이는 없고 코딩줄이려면 if 쓰는게 낫겠군요
윗분들 말씀처럼 대량에선 sort 가 돼있다면 read 가 훨씬 빠릅니다
-
JG
2010.04.22 18:54
단순히 read와 loop 명령어로 성능차이를 비교하면 안될 듯 싶은데요. 위의 예제 소스만 봐도 기준이 다른거 같네요. loop는 전체 돌면서 zname별로 처리를 하는게 목적인거고.. read는 다른 작업을 하는 중에 zname을 읽어내는게 목적이니... 저 예제로는 성능 비교 대상이 될 수 없지 않을까 싶습니다. read와 동일한 목적으로 loop를 돌리신다면 where절이 붙게 될테고 조건에 해당하는 데이터가 1건이라면야 read를 쓰는게 좋을 듯 싶지만 여러건이 존재한다면 loop를 쓰는게 좋지 않을 까 싶네요. 상황에 따른 적절한 명령어 선택이 튜닝 방법이지 않나 싶습니다.
-
버미!
2010.04.22 22:17
답변 주신 분들 감사드립니다.
상황에 맞게 써야 겠네요...어떤 것이 더 효율적인지..현재는 Loop문을 썼거든요..
저정도 소량이라면 어느것이든 차이없을듯한데여..
대량의 경우 속도를 개선할려면 READ를 사용해야 합니다.
차이에 대해서 아시는지 모르지만
LOOP은 1~100까지 전체를 도는것이고
READ ~~ BINARY SEARCH를 찾는값이 5라면 5까지만
넘어가고 그다음은 종료입니다(그래서 SORT가 꼭 되어 있어야 함)