날짜(varchar2)를 조회할 때 between과 like의 차이는 무엇입니까? 1 2 977

by 물통20병 [Oracle 기초] 날짜 구간 [2017.08.17 17:33:26]


varchar2(8)글자로 구성된(yyyymmdd)로 구성된 데이터를 조회할 때 2017년을 조회하는 경우

like '2017%' 와 between '20170101' and '20171231'은 같은 결과를 가져다 주는데 내부적으로 차이점은 어떤 것이 있나요?

어떤 것이 성능상 유리한지 궁금합니다

 

by jkson [2017.08.17 17:47:12]

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이 좋습니다.


by 물통20병 [2017.08.17 17:50:20]

답변감사합니다 ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입