-
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