보통 테이블에 REGDATE 는 DATETIME 형으로 되어있는데요
날짜를 조회 할때
CONVERT(VARCHAR,REGDATE,23)='2013-05-14'
이런식으로 조회를 많이 합니다.
근데 문제는 CONVERT 이넘 때문에 REGDATE 가 인덱스를 타지 않는거 같은데요
다른 방법이 없을까요??
선배님들 조언좀 부탁드립니다.
Comment 4
-
dontcryme
2013.12.05 11:40
-
군고구마
2013.12.05 11:48
제가 아는 바로 where조건에 형변환을 시키면 인덱스를 타지 않습니다.
regdate를 원 데이터로 쓰셔야지 가공해서 쓰셔서 인덱스를 타지 못하는 듯 합니다.
제가 볼때 지금 질문자 님은 regdate를 시간과 분을 잘라서 몇일부터 몇일로 검색하고자 하는거 같은신데
위에 between 으로 하시면 원데이터 (regdate)를 가공하지 않기 때문에 인덱스를 탈 것으로 예상됩니다.
-
alima
2013.12.05 14:34
다들 바쁘신데 소중한 답변 정말 감사합니다 많은 도움이 되었습니다^^
-
한태
2016.02.16 21:13
인덱스를 사용하려면 where절의 쿼리를 작성할 때 검색 제한자를 포함하여 작성해야 합니다.
인덱스 컬럼이 가공이 되면 인덱스를 타지 못합니다.
그렇기에 regdate 컬럼을 가공하지 않고 between 이나 <=and>= 를 사용하면 될 것입니다.
한가지 유의할 점으로는 datetime 형식이기에 <= 01/01/2016 과 <= 01/01/2016 23:59:59 는 같지 않다는 것만
유의하시면 될 것 같습니다. <= 01/01/2016의 경우에는 <= 01/01/2016 00:00:00 으로 계산되어서 결과가 달라질 수 있습니다.
안녕하세요.
where regdate between convert(xxxx) and convert(xxxx)
이렇게 조건 주시는건 어떠실지요~