안녕하십니까! 개인적으로 쿼리 테스트중에 있습니다. 아래쿼리는 모두 같은 결과를 나타내는 쿼리입니다. 시작년도가 2016으로 시작하는 데이터들을 검색하는데요, lp_sdt 컬럼은 DATA타입으로 되있습니다. 데이터가 너무많아서 검색속도가 느립니다 그나마 3개중에 속도는 1번째 꺼가 조금 빠르더군요. 전체데이터대비 조회데이터가 40%이상이라 인덱스는 불필요할것같고.. 저기서 더 빠르게 검색할수있는 방법이있는지 궁금합니다. 전체 로우수 1207226 / 검색 로우수 506826 SELECT * FROM TEST_DB@TS WHERE lp_sdt like '16%' SELECT * FROM TEST_DB@TS WHERE substr(trim(lp_sdt),1,2) = '16' SELECT * FROM TEST_DB@TS WHERE to_char(lp_sdt,'YYYY') = '2016'
SELECT * FROM TEST_DB@TS
WHERE INSTR(LP_SDT,'16') = 0
WHERE INSTR(LP_SDT,'16') = 1
이렇게도 해보세요.
오타났네요;
오잉? 다시 읽어보니 lp_sdt 가 날짜형이네요?
왜 lp_sdt between '2016-01-01' and '2016-12-31'
로 하시지 않는 거죠?
이게 젤 빠를텐데요.
날짜형이 맞다면 적으신 방법 모두 날짜형->문자형으로 변환한 뒤에
필터하게 되어 느리구요. (날짜형에 LIKE 해주셔도 내부적으로 문자형으로 변환합니다.)
제가 적어드린 INSTR 방법도 컬럼이 문자형일 때 사용하는 방법이고
문자형 중간에 글자를 찾을 때는 보통 LIKE '%%' 검색보다 빠르다고 알려져있는데
문자 첫 시작은 거의 비슷할 것 같습니다.
날짜형 컬럼은 날짜형태로 조회하세요.