오라클(Oracle) 쿼리문을 작성하다 보면 사용자 정의 함수를 많이 만들어서 사용하게 된다. 함수 사용이 쿼리 속도를 느리게 만드는 원이이 될수도 있기 때문에 사용을 권장하지 않지만, 특정 기능들을 모듈화 할 수 있어서 복잡한 쿼리문을 간결하게 만들고 차후 쿼리문을 수정할 때 아주 큰 도움이 된다.
함수 사용시 캐싱 기능을 이용하면 함수 내부의 쿼리를 실행하지 않고 입력값이 동일하면 캐시에 이미 저장된 결과값을 사용할 수 있다.
캐싱 기능을 이요하기 위해서는 두가지 방법이 있다.
- 스칼라 서브쿼리 캐싱효과 이용
- 함수 결과 캐싱 (function result cache) 이용 (오라클 11g 이상에서 사용가능)
캐싱 기능을 사용시 주의할점
- 함수의 입력 값 종류가 적을때 효과적이며, 입력 값의 종류가 다양하다면 오히려 성능을 저하할 수 있다
스칼라 서브쿼리 캐시 |
- 함수가 사용되는 특정 쿼리만 캐싱 기능을 적용할 수 있지만 캐시가 언제 초기화 되는지 명확하지는 않다
함수 결과 캐시 |
- 오라클 11g 이상의 버전에서 사용가능 하다
- 해당 함수를 사용하는 모든 쿼리에 적용이 된다
- 참조 테이블의 변화가 생기면 캐시가 초기화 된다 (참조 테이블이 변화가 적을때 유리)
- 기존 함수의 리턴값 형식 아래에 result_cache 구문을 추가한다
- result_cash relies_on(참조테이블1, 참조테이블2, ......)