CAFE

ABAP/4 Tip

[참고사항][쓸대없는 고찰] 바이너리 Search 에 대한 고찰 .

작성자파이로매니악|작성시간06.05.30|조회수5,205 목록 댓글 1

 

인터널 테이블을 읽어들이는 방법은 크게
Loop 문을 돌려 찾아내는 방법과
Read하여 찾는방법 두가지가 있습니다.

인터널 테이블의 크기가 작다면 두방법다 문제가 안될테지만
인터널 테이블의 라인수가 많다면(대략 10000건 이상이면서 계속적으로 읽어들일때)
문제가 생깁니다.

보통 아무 선언 없이 인터널 테이블을 읽어 들일때는 한줄 한줄 읽어 들이며 키값과 비교하는 방식을 사용하게 되는데
건수가 많고 많이 읽어들이면(I/O가 많다면) 많은많큼 느려지게 됩니다.

따라서 읽어들이려는 키 값을 올림차순 정렬을 한뒤에
Read문의 옵션에 Binary Search옵션을 주어 속도를 빠르게 합니다.

뭐 이렇게 하면 속도가 빨라진다라는것은 ABAP을 하시는 분이라면 다 아실듯 합니다.
^^; 그럼 여기서 Binary Search의 원리와 왜 정렬을 해야 되는지를 알아보겠습니다.

Binary Search는 인터널 테이블의 키값의 중간을 짤러 크기 비교를 하여 찾아 가는 방식입니다.
만약 "B"라는 키값을 찿으려고 하고
아래와 같이 인터널 테이블이 구성되어 있다면

원본키
------------------------------
A
B
C
D
E
F
G
H
I
------------------------------

찾기 1
원본키
------------------------------
A
B
C
D
E " <- 찾으려는값 B가 E보다 큰지 작은지 비교
F
G
H
I
------------------------------

찾기 2
원본키
------------------------------
A
B
C" <- 찾으려는값 B가 C보다 큰지 작은지 비교
D
E
F
G
H

------------------------------

찾기 3
원본키
------------------------------
A
B" <- 찾으려는값 찾음
C
D
E
F
G
H

------------------------------

위와 같은 방식으로 찾게 됩니다.
만약 정렬이 안되어 있다면.. 값을 찾을때 오동작을 일으키게 됩니다.
찾는 값이 아닌데도 찾았다고 나오는 경우가 나옵니다.

해서 꼭 오름 차순 정렬을 해야지 위와 같은 순서로 값을 찾아 낼수가 있습니다.
물론 찾으려는 키값에대해서죠..

이거 저거 생각 하시기 싫으신분은 Sorted table로 선언 하여 사용하시면 됩니다.
그러면 간단히 키값에 대한 바이너리 써치만 해주면 되겠죠..

그럼 다들 즐밥 하시고요..
또 다들 아시는 쓸데 없는 소리 한번 하고 갑니다.

다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 공유하기
  • 신고하기

댓글

댓글 리스트
  • 작성자제로젯 | 작성시간 06.04.25 아 감사합니다. 그렇지 않아도 데이터가 나왔다가 사라졌다가 들쑥날쑥했는데 원인이 바이너리 서치에 있더군요 저는 초보라 몰랐는데 많은 도움이 되었습니다.
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼