일반론으로 이야기 하면
- 함수가 가장 느립니다.
- 스칼라서브쿼리가 그 다음.
- 조인이 가장 빠르죠.
- 관리측면 제외하고 속도만 본다면? 조인 없이 decode 쓰는게 가장 빠르겠지요.
예외는 물론 있습니다.
- 값의 종류가 얼마 되지 않는 코드값의 경우엔
- 조인보다 스칼라서브쿼리가 더 빠를 수도 있습니다.
- 메인쿼리 데이터가 대량일 때 서브쿼리 캐싱 효과를 볼 수 있기 때문입니다.
함수는 진짜 방법이 없습니다.
- 함수의 비효율을 최대한 제거하여 최적화하고
- 함수를 deterministic 으로 선언하고
- dual 을 이용한 서브쿼리로 바꾸어 서브쿼리 캐싱까지 적용시켜도
- 근본적으로 데이터 량이 많아지면 성능 개선에 한계가 있습니다.
함수 사용이 개발 가이드로 되어 있다면?
- 함수 사용을 기본으로 하되 성능이 느린 경우에 한해서 다른 기법을 사용하는 것을 허용해야 할 것입니다.
- 소량의 자료 쿼리엔 함수 사용
- 대량의 자료 쿼리엔 조인 사용
- 대량의 자료 쿼리중 캐싱효과가 기대되는 경우에 서브쿼리 사용