반응형
[해당 챕터는 예제가 많아서 1차정리 후 추후에 다시 정리하겠습니다]
사용자 정의 함수는 소량의 데이터 조회시에만 사용하는 것이 좋습니다.
대용량 데이터를 조회할 때는 부분범위처리가 가능한 상황에서 제한적으로 사용해야 하며, 될 수 있으면 조인 또는 스칼라 서브쿼리 형태로 변환하려는 노력이 필요합니다.
어쩔수 없이 함수를 쓸때는 호출 횟수를 최소화 할 수 있는 방법을 강구해야 합니다.
호출횟수를 최소화 할 수 있는 방법
(1)페이지 처리 또는 부분범위처리 활용
(2)Decode 함수 또는 Case문으로 변환
(3)뷰 머지(View Merge)방지를 통한 함수 호출 최소화
힌트에 NO_MERGE 사용하기, ROWNUM을 사용하기
(4)스칼라 서브쿼리의 캐싱효과를 이용한 함수 호출 최소화
스칼라 서브쿼리를 사용하면 오라클은 그 수행횟수를 최소화하려고 입력 값과 출력 값을 내부 캐시에 저장해둡니다. 그것을 이용하는 방법입니다. 함수를 dual 테이블을 이용해 스칼라 서브쿼리로 한번 감싸는 것입니다.
이 기법은 입력 값의 종류가 소수여서 해시 충돌 가능성이 적은 함수에 적용해야 하며, 그러지 않을 경우 도리어 CPU 사용률만 높이게 되므로 먼저 원리를 출분히 이해하고 나서 효과가 확실한 경우에만 사용해야 합니다.
(5)Deterministic 함수 캐싱 효과 활용
10gR2에서 함수를 선언할 때 Deterministic 키워드를 넣어주면 스칼라 서브쿼리를 덧입히지 않아도 캐싱 효과가 나타납니다.
(6)복잡한 함수 로직을 풀어 SQL로 구현
반응형
'스터디 > 오라클 성능고도화 원리와 해법1' 카테고리의 다른 글
06.I/O 효율화 원리 - 02. Memory vs. Disk I/O (0) | 2020.02.09 |
---|---|
06.I/O 효율화 원리 - 01. 블록 단위 I/O (0) | 2020.02.09 |
05.데이터베이스 Call 최소화 원리 - 07.PL/SQL 함수의 특징과 성능부하 (0) | 2020.02.03 |
05.데이터베이스 Call 최소화 원리 - 06. 페이지 처리의 중요성 (0) | 2020.02.02 |
05.데이터베이스 Call 최소화 원리 - 05. Fetch Call 최소화 (2) | 2020.01.30 |
댓글