이전에 standard와 sorted를 먼저 다뤘기 때문에, hashed table만 다루고자한다-!

 

HASHED TABLE이란?

  • 내부적으로 해시 알고리즘을 사용해서 탐색.
  • 항상 UNIQUE KEY가 있어야 함.
  • 탐색 속도 O(1): 항목이 수천 개여도 거의 같은 속도!
  • 단점: 인덱스 기반 접근 불가 → 순서 개념이 없음!
TYPES: BEGIN OF ty_fruit,
         name  TYPE string,
         price TYPE i,
       END OF ty_fruit.

DATA: gt_fruit TYPE HASHED TABLE OF ty_fruit
                WITH UNIQUE KEY name.

DATA: gs_fruit TYPE ty_fruit.

- 순차적인 index를 가지고 있지 않음

- Standard table의 key access 속도는 인터널 테이블의 LINE수에 따라 선형 종속적으로 증가

- Sorted Table은 지수 함수로 증가

 

- HASHED TABLE은 정해진 KEY 필드값으로만 데이터를 찾을 수 있다!

TYPES: BEGIN OF ty_fruit,
         name  TYPE string,
         color TYPE string,
         price TYPE i,
       END OF ty_fruit.

DATA: gt_fruit TYPE HASHED TABLE OF ty_fruit
                WITH UNIQUE KEY name.   " name이 유일 키!

- 이렇게 정의하면 name 필드만 키다.

- 탐색은

`READ TABLE gt_fruit WITH KEY name = 'apple' INTO gs_fruit.   "⭕ OK` 이렇게 하면됨!

다른 key로 찾거나, index접근을 한다면 그것은 불가능!

 

하지만 키 필드를 여러개 지정은 가능하다.

DATA: gt_fruit TYPE HASHED TABLE OF ty_fruit
                WITH UNIQUE KEY name color.

- 이렇게 된다면 탐색은

READ TABLE gt_fruit WITH KEY name = 'apple' color = 'red' INTO gs_fruit.  "⭕ OK

 -모든 키 필드를 명시하고, 일부만 지정하면 탐색은 불가하다.

 

해시테이블 탐색흐름

1. 내가 찾고자 하는 키(name, 또는 name+color)를 정의한다

2. 해시 테이블이 그 키로 해시값을 계산한다

3. O(1) 시간 안에 값을 바로 찾아낸다!

 

 

READ TABLE <ITAB> WITH KEY col1 BINARY SEARCH.

=> Binary Search하는 방법!

 

LOOP AT itab.
	READ TABLE ITAB WITH KEY
ENDLOOP.

⬇️

SORT ITAB BY F1.
LOOP AT ITAB.
	READ TABLE ITAB WITH KEY~
    BINARY SEARCH.
ENDLOOP.

 

Binary SEARCH vs Sorted

- APAB은 상황에 따라 Binary SEARCH를 명시적으로 사용하기도 하지만,

보통은 SORTED or HASHED 테이블을 사용해서 자동 최적화를 함

 

1. STANDARD TABLE

- 기본 테이블 구조

- 선형탐색(linear search) -> 한줄씩 검사

- 느리다는 단점이 있음

 

2. SORTED TABLE

- 정렬된 상태 유지

- 자동으로 이진탐색 사용됨

- 빠르다! (O(longN))

3. HASHED TABLE

- 키를 기준으로 해시값 계산

- 항상 상수 시간(O(1)) 탐색

- 가장 빠름, 단 READ WITH TABLE KEY만 가능

 

항목 Standard Table Sorted Table Hashed Table
탐색 속도 느림 (O(n)) 빠름 (O(log n), 자동 Binary Search) 매우 빠름 (O(1), 해시 탐색)
정렬 상태 없음 항상 정렬 유지 (키 기준 자동 정렬) 없음 (순서 없음, 해시 구조)
키 설정 선택 가능 (UNIQUE/ NON-UNIQUE) 필수 (UNIQUE or NON-UNIQUE) 필수 (항상 UNIQUE만 가능)
중복 키 허용 여부 가능 (WITH NON-UNIQUE KEY) 가능/불가능 설정 가능 ❌ 불가 (항상 UNIQUE KEY 필수)
인덱스로 접근 ✅ 가능 (READ INDEX, LOOP AT INDEX) ✅ 가능 ❌ 불가능 (INDEX 접근 불가)
삽입 속도 빠름 삽입 시 자동 정렬이 있어 비교적 느림 빠름 (단, 키 중복 시 오류)
적합한 사용 상황 소규모, 간단 순차처리, 인덱스 접근 필요 정렬된 데이터 기반 탐색 키 기반 빠른 조회가 중요한 경우
탐색 방법 예시 READ TABLE ... READ TABLE ... (정렬 기준 키 사용) READ TABLE ... WITH KEY ... 필수
LOOP 사용 가능 여부 ✅ 가능 ✅ 가능 ✅ 가능 (단, 순서 의미 없음)
APPEND 가능 여부 ✅ 가능 ✅ 가능 (정렬 위치로 자동 삽입) APPEND 불가 → INSERT 사용

 

+ Recent posts