SAP/Abap

[Open SQL & Native SQL] SQL else

i009727 2022. 1. 14. 12:38

[Open SQL 실행 프로그램]

REPORT ZA03_20.

PARAMETERS : p_sql(255) TYPE c.

DATA : go_sql TYPE REF TO cl_sql_statement,
       gv_sql TYPE string,
       gd_ret TYPE i.

CREATE OBJECT go_sql.
gv_sql = p_sql.

TRANSLATE gv_sql TO UPPER CASE.

CALL METHOD go_sql->execute_update
  EXPORTING
    statement      = gv_sql
  RECEIVING
    rows_processed = gd_ret.

프로그램 실행전
실행부
프로그램 실행후

 

[효율적인 SQL문 작성]

1) 적중 리스트 최소화

  • SELECT문을 통한 데이터 조회시, WHERE 구문을 통해 적중되는 데이터 리스트를 최소화 해야한다.

 

2) 전송되는 데이터양 최소화

  • SELECT SQL문은 DB서버에서 SAP서버로 전송되는 양이 최소화되도록 구성되어야 한다.
    • 에스터리스크(*) 사용 자제
    • UPTO n ROWS 사용

 

3) LOOP 소요비용 최소화

  • Single line 처리 대신 Several line 처리가 효율적이다. 즉, 개별 work area 사용보다 internal table 사용이 효율적이다.
  • Nested SELECT 구문 사용 자제
    • INNER JOIN, FOR ALL ENTRIES, Subquery 구문이 효율적이다.

 

4) 검색비용 최소화

  • INDEX를 활용하는 SQL문을 구성해야하고, OR연산자 대신 AND와 EQ연산자를 사용해야한다.

 

5) 데이터베이스 부담 제거

  • 트랜잭션이 자주 발생하지 않는 테이블, 즉 마스터 성격의 테이블은 버퍼링 설정을 하는것이 효율적이다.
  • ORDER BY구문보다 SORT구문이 효율적이다.

 

6) 인덱스에 사용된 필드 모두 기술

  • 인덱스는 SQL구문에 가장 큰 성능적 영향을 미치므로 가급적 인덱스로 구성된 필드를 사용하는것이 효율적이다.
    • 특정 테이블의 인덱스가 (carrid, connid, fldate)라면 carrid 값을 모르더라도 빈값을 사용하는것이 효율적이다.

 

7) 정렬작업은 Application Server에서 실행

  • SQL문의 ORDER BY를 통한 정렬보다 Application Server의 테이블 SORT기능이 더 효율적이다.