[Oracle] 오라클의 실행계획
- Information Logs/IT Notes
- 2014. 8. 21. 22:57
반응형
안녕하세요, 우리노트 Benjamin입니다.
오라클을 사용하다보면 정말 개발자를 찬양하게 만드는 경우들이 종종 있습니다. 그 예를 하나 살펴 보겠습니다.
# 아래 쿼리의 결과 두가지는 동일한 결과를 리턴합니다. 당신이라면 어떤 쿼리를 선택하겠습니까?
SQL> select *
from emp
where sal >= 1000 and sal <=1500
SQL> select *
from emp
where sal between 1000 and 1500
set autot on 으로 하고 실행 계획을 확인해보면 두쿼리 모두
sal >= 1000 and sal <=1500 로 필터링 되는 것을 확인할 수 있습니다.
즉 between은 오라클 내부에서 부등식으로 바뀌어 처리됩니다.
그렇다면 between은 더 성능이 나쁜 쿼리문일까요?
오라클 내부에는 다양한 Transformation 기능들이 있습니다.
사용자가 직접 부등식을 써서 지정하면 이러한 Transformation 기능을 거치지 않고 처리되는 것입니다.
어떠한 경우는 이러한 transformation 을 통하여 더 좋은 성능이 구현되는 경우도 있습니다.
즉, 사용자가 최적의 실행계획을 정확히 알고 있지 않다면 그냥 오라클에게 맡기는 편이 성능 향상에 도움이 된다는 것입니다.