by 물통20병 [Oracle 기초] 날짜 구간 [2017.08.17 17:33:26]
varchar2(8)글자로 구성된(yyyymmdd)로 구성된 데이터를 조회할 때 2017년을 조회하는 경우
like '2017%' 와 between '20170101' and '20171231'은 같은 결과를 가져다 주는데 내부적으로 차이점은 어떤 것이 있나요?
어떤 것이 성능상 유리한지 궁금합니다
INDEX가 YYYYMMDD 만 있는 단일 인덱스일 경우 스캔 범위는 동일할 거구요.
만약 YYYYMMDD, COL1이 결합 인덱스이고 WHERE 조건이 다음과 같다면
쿼리1
YYYYMMDD BETWEEN '20170101' AND '20171231'
AND COL1 = 'SEOUL'
쿼리2
YYYYMMDD LIKE '2017%'
AND COL1 = 'SEOUL
쿼리1의 경우
20171231일 SEOUL까지만 조회하고 스캔을 멈춥니다.
무슨 말이냐하면..
20170101 GANA --> 인덱스 스캔 시작
..
..
20171231 GANA
20171231 HONGKONG
20171231 SEUOL -> 여기까지만 SCAN
20171231 HAWAI
명확이 SEOUL까지만 읽을 수 있지만
쿼리2의 경우
SEUOL에서 멈출 수가 없습니다.
20171301이라는 자료가 있을 수도 있으니 뒤에 HAWAI도 읽어봐야하니까요.
HAWAI을 읽고 뒤에 201713~ 인자료가 없다는 것을 확인한 후에야 SCAN이 멈출 겁니다.
결론적으로 between이 좋습니다.