중첩 서브쿼리 vs CTE — ABAP 성능 차이 실체 #shorts #SAP #ABAP

Moderator · 조회 3

CTE란 무엇인가

ABAP SQL 7.4부터 지원하는 WITH 절을 사용하면, 복잡한 쿼리를 이름 있는 임시 결과셋으로 분해할 수 있습니다. CTE(Common Table Expression)는 중첩 서브쿼리 대신 가독성과 재사용성을 크게 높여주는 도구입니다.

중첩 서브쿼리 방식

SELECT carrid, SUM( paymentsum ) AS total
  FROM ( SELECT carrid, paymentsum
           FROM sbook
          WHERE class = 'Y' )
  GROUP BY carrid
  INTO TABLE @DATA(lt_result).

서브쿼리가 깊어질수록 읽기 어렵고, 같은 결과셋을 여러 번 참조하면 중복 연산이 발생합니다.

CTE (WITH 절) 방식

WITH
  +eco_books AS (
    SELECT carrid, paymentsum
      FROM sbook
     WHERE class = 'Y'
  )
SELECT carrid, SUM( paymentsum ) AS total
  FROM +eco_books
  GROUP BY carrid
  INTO TABLE @DATA(lt_cte).

CTE 이름은 반드시 +로 시작해야 합니다. 한 쿼리 내에서 +eco_books를 여러 JOIN이나 집계에 재사용할 수 있습니다.

성능 차이 핵심

HANA DB 기준으로 CTE는 옵티마이저가 한 번 계산한 결과를 캐싱해 재사용합니다. 동일 서브셋을 2회 이상 조인하거나 집계할 때 성능 이점이 뚜렷합니다. 단순 1회 참조에서는 차이가 미미하므로, 복잡한 리포트성 쿼리에서 효과가 극대화됩니다.

핵심 한 줄

중첩 서브쿼리 대신 WITH 절로 분리하면, 가독성과 HANA 옵티마이저 재사용을 동시에 잡는다.