I Agree Line Smiley

SAP/ABAP

ABAP Secondary Key

지코딩 2024. 5. 13. 08:00

안녕하세요! 오늘은 Table Index를 수월하게 관리할 수 있는 Secondary Key에 대해 포스팅하겠습니다!


Secondary Key

Secondary Key는 쉽게 설명하면 Internal table 의 두번째 Key입니다.
메인키인 Primary Key가 아닌 Sort 용 Key로 Table의 Index를 수월하게 관리할 수 있는 역할을 하고있습니다. 
Secondary Key는 많은 레코드를 가진 Table에 사용하며, 인덱스의 변화를 주는 구문에서 사용하면 안됩니다.
 


1. Secondary Key 선언

Secondary Key는 위 코드 와 같이 사용할 수 있으며, Sorted key 구문을 이용하여 선언할 수 있습니다.
 
예시에서는 lt_keytest 테이블에 carrid 필드를 Key로 가진 Key_1 이라는 Secondary Keycarrname 필드를 Key 를 가진 Key_2 라는 Secondary Key 총 두개의 Key를 선언해주었습니다.


2. Secondary Key 사용

예시를 통해 Secondary Key를 사용하는 것을 확인 해보겠습니다.

 
먼저 Carrid 와 Carrname에 불규칙적인 데이터를 가진 테이블을 만들었습니다.

 
불규칙적인 레코드 가진 table을 Secondary Key를 활용하여 Loop 를 돌려보겠습니다.
* Using  Key 구문에 선언한 Sorted Key 를 적으면 해당 Key를 기준으로 Table이 정렬됩니다. 
 

 
해당 구문 실행 결과, Key_1을 사용한 첫번째 loop는 Carrid 를 기준으로 정렬됐고, Key_2를 사용한 두번째 Loop는 Carrname을 기준으로 정렬이 된것을 확인할 수 있습니다.
이처럼 Secondary Key를 사용한다면, Sort구문 없이 Internal table을 관리 할 수 있습니다.
 

 
이때, Debugigng 을 해보면 인터널 테이블의 레코드의 순서는 처음과 바뀌지 않은 것을 확인 할 수 있습니다.
즉 Secondary Key를 사용한 구문에서만 Index가 바뀌며, Internal Table 자체의 Index에는 영향을 끼치지 않는 것을 확인 할 수 있습니다. 
 


3. Secondary Key 활용

 
Carrid 가 'A02' 인 데이터의 이름을 A_항공사로 바꾸는 로직을 해보겠습니다.
먼저, 불규칙적인 데이터를 가진 인터널 테이블에 타겟 필드를 읽어 타겟 필드의 Index를 저장합니다.
 
lt_keytest에 'A02' 는 4번째에 존재하지만 carrid 로 정렬된 Key_1을 통해 읽으면 3번째에 존재하므로, lv_tabix 의 값은 3이 됩니다.
 
그렇게 lv_keytest의 3번째 index부터 Loop 를 돌며 타겟을 벗어나면 Loop가 끝나게 됩니다.
 

 
해당 코드의 결과는 다음과 같으며, 타겟 필드의 값인 'A02' 인 데이터만 Loop 를 진행하며, '나_항공사'에서 'A_항공사'로 바뀐 것을 확인 할 수 있습니다.
 
추가적으로 Loop 를 사용하실때 Where 를 사용하게되면, Loop 안에 구문은 안타겠지만, Table을 풀 스캔하기때문에 대용량 Table을 이용할때는 Secondary key를 활용해 보시는 것을 추천합니다.
 
또한 Abap New Syntax인 FILTER 구문을 사용하기 위해서는 KEY가 꼭 필요하니, Secondary Key를 활용해서 로직을 사용해보시길 바랍니다.
 
즐밥!