Git :)

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 친절한 SQL 튜닝
    IT 서적/친절한 SQL 튜닝 2023. 10. 20. 23:21

     

    함수호출부하 해소를 위한 인덱스 구성

    PL/SQL 사용자 정의 함수가 느린데에는 아래와 같은 세 가지 이유가 있다.

    • 가상머신 상에서 실행되는 인터프리터 언어 ==> JAVA와 마찬가지로 기계어로 변환하는 작업을 거쳐야함
    • 호출 시마다 컨텍스트 스위칭 발생
    • 내장 SQL에 대한 Recursive Call 발생

    그렇다면, 어떻게 해야 함수호출을 최소화할 수 있을까...?

     

    • 조건절에 아래와 같이 PL/SQL 함수를 사용하면 회면 테이블을 Full Scan 방식으로 읽는데 encryption 함수는 테이블 건수만큼 수행된다.
    SELECT /* full(a) **/ 
           회원번호, 
           회원명, 
           생년, 
           생월일, 
           등록일자
      FROM 회원 a
      WHERE 암호화된_전화번호 = encryption( :phone_no )

     

    • 반대로 아래와 같이 설정돼 있는 구조라면 생년과 암호화된 전화번호는 모두 인덱스 액세스 조건으로 사용된다. 따라서 encryption 함수는 단 한번 수행된다.
    CREATE INDEX 회원_X01 ON 회원(생년, 암호화된__전화번호) ;
    
    SELECT /*+ index(a 회원_X01) */ 
          회원번호, 
          회원명, 
          생년, 
          생월일, 
          등록일자
      FROM 회원 a
      WHERE 생년 = '1987'
        AND 암호화된_전화번호 = encryption( :phone_no )

    한줄 요약하자면, 회원_X01이라는 인덱스의 가장 첫번째 값 '생년'이 WHERE 조건절의 가장 앞에 존재하는 것이 핵심이다.

    'IT 서적 > 친절한 SQL 튜닝' 카테고리의 다른 글

    8. 친절한 SQL 튜닝  (0) 2023.10.21
    7. 친절한 SQL 튜닝  (0) 2023.10.21
    5. 친절한 SQL 튜닝  (0) 2023.10.20
    4. 친절한 SQL 튜닝  (0) 2023.10.20
    3. 친절한 SQL 튜닝  (0) 2023.10.20