ABAP

SAP HANA 에서는 Select (*) 를 써도 됩니다.!!

공사중 2021. 4. 21. 14:14

안녕하세요. 

공사중 입니다. 

 

SAP 가 HANA DB 기반으로 넘어오면서 그동안 가이드했던 골든룰 중에 뭣이더 중하고 뭣이좀 덜 중하고, 이건 안봐도 되고 .. 블라블라. 하는 이야기를 들어보셨을거에요. 

 

세부적으로 보면 이런저런 이야기가 많지만, 간단하게 요약해 보면... ...

SAP 성능 향상 가이드라인  단순 요약  HANA 변경후 중요성
결과 세트를 작게 유지  Select single -> select & loop 
Where 구문을 구체적으로 활용.
이전처럼 중요
전송되는 데이터의 양 최소화 Select * -> Select ( Field lists )
집계함수(COUNT, MIN, MAX, SUM, AVG) 사용
더 중요
데이터 전송 횟수 최소화

중첩 SELECT 대신 JOIN 및 / 또는 하위 쿼리 사용
SELECT… FOR ALL ENTRIES 사용
DML( INSERT, MODIFY, ... ) 시에 Array 형태로 사용

더 중요

검색 오버 헤드 최소화 적절한 인덱스 사용.  덜 중요
데이터베이스에서 부하 유지 중복데이터 읽지 않기
Table Buffer 사용. 
ABAP Layer 에서 데이터 정렬
덜 중요

 

이중에 전송되는 데이터의 양 최소화 에는 

Column 기반 Table 을 사용하기 때문에 Select * 를 사용하는 것보다 Select ( Field list ) 를 사용하는게 더 중요하다 라는 내용이 있습니다.

 

저도 당연히 그런줄 알고 있었죠~~~!!!! 

하지만, S/4HANA 에서 소비기반으로 알아서 가져온다는 이야기가 귀에 들려서 검증에 들어가 보았습니다. 

 

아래의 코드 블럭의 경우, 당연하게도 모든 컬럼에 다 접근을 하게 되겠죠?

select *
  from bkpf
  into TABLE @data(itab).

< 모든 컬럼을 다 가져오는 실행 플랜 >

보통은 아래처럼 필요한 컬럼만 가져와야죠~~

  SELECT BUKRS,
         BELNR,
         GJAHR
    FROM BKPF
    INTO TABLE @DATA(ITAB).

< 필요한 컬럼만 가져오는 실행 플랜>

그런데..  놀랍게도.... 

TYPES : BEGIN OF TY_KEY,
          BUKRS TYPE BUKRS,
          BELNR TYPE BELNR_D,
          GJAHR TYPE GJAHR,
        END OF TY_KEY.

DATA : ITAB TYPE TABLE OF TY_KEY.

SELECT *
  FROM BKPF
  INTO CORRESPONDING FIELDS OF TABLE @ITAB.

< Select * corresponding. 실행 플랜>

Select * 를 사용해서 Open Sql 을 실행했을때, 동일한 결과가 나타납니다. !!!

 

결론을 말씀드리면, 

원하는 필드에 해당하는 데이터만 가져오는건 당연하지만, 

S/4HANA 에서는 반드시 Select * 를 사용하지 말아야 하는건 아닙니다.

 

※ (오해금지) 실제 사용하는 필드의 데이터만 가져오는 부분은 HANA DB 에서 매우 중요합니다. !!

 

 

끝..