SQLD를 공부하다가 BETWEEN a AND B 연산자를 보고
비교 연산자(>= 또는 <= )를 사용한거랑 차이가 있나 싶어서
찾아보게 되었다.
실제로 구글링을 하다보면 비교 연산자를 사용한 쿼리가
BETWEEN 연산자보다 성능이 좋다는 글들이 보인다.


두 쿼리의 성능을 테스트한다 해놓고 쿼리 소요 시간(Duration)이 아닌
쿼리 실행 계획(execution plan)이 나와 의문이 드는 사람이 있을거다.
실제로 소요 시간을 비교했을때 0.n초 정도의 차이가 있었지만
항상 부등호 연산이 높았던 것도 아니고
데이터의 분포, 데이터베이스의 상태, 네트워크의 상태 또는 캐시 사용 여부등
다양한 환경 요소를 고려했을때 소요 시간으로 비교하는건 타당치 않다 생각했다.
SQL을 실행하여 데이터를 추출하고자 할 때 optimizer가 수립하는 작업 절차다.
optimizer는 쿼리를 실행할때 가장 효율적인 실행 계획을 선택한다.


위의 두 화면의 우측 부분이 쿼리의 실행 계획이다
두 쿼리는 다른 연산자를 사용하였지만 동일한 explain임을 확인할 수 있다.
또한 결과를 필터링하는데 동일한 Filter Predicate을 사용하는걸 볼 수 있다.
일단 오라클 상에서는 성능 차이가 없다라고 생각한다.
하지만 DBMS Engine에 따라 일부 DB는 비교식을 두번 계산하는 경우도 있다고 한다.
즉 DB종류나 특정 환경에 따라 최적화가 되어있을수도 있다는 의미다.
성능을 비교할 때 소요 시간만이 아닌 실행 계획을 확인해봐야 한다는걸
경험해본거 같다
https://stackoverflow.com/questions/4809083/between-clause-versus-and
(틀린 부분 있으면 지적해주시면 감사하겠습니다.)