datetime 인덱스 연산 관련 문의 0 1 459

by 나는짱이야 [SQLServer] [2019.04.02 22:34:49]


 

안녕하세요.

다름이 아니라 DateTime 형 컬럼에 WHERE 조건으로 검색 시 INDEX 연산이 가능한지 문의 드립니다.

이제까지 알고 있는 지식으로 DateTime형은 index 연산이 불가능하다(?) 라고 인지 하고 있었습니다.

그래서 날짜 범위 형 검색 컬럼은 별도로 char(8) 두고 데이터 입력 시 가공해서 사용하였고 검색시 가공 입력 컬럼을 가지고 날짜 범위를 검색 하였습니다.

제가 잘못알고 있는건지 궁금합니다.

by 마농 [2019.04.03 08:31:44]

네. 잘못 알고 계시네요.
인덱스에 데이터 타입 제한은 없습니다.
혹시 이런 경우 때문에 잘못 이해한게 아닐까요?
 WHERE CONVERT(VARCHAR(10), dt, 23) = '2019-04-03'
이런식으로 조건을 주면 컬럼을 가공하였으므로 인덱스 못탑니다.
앞에 전제조건 "컬럼을 가공하였으므로"는 빼고 결론인 "인덱스 못탑니다."만 보신 듯 하네요.
컬럼은 그대로 두고 조건을 가공하는 형태로 하면 인덱스 탑니다.
 WHERE dt >= DATEADD(day, 0, '2019-04-03')
   AND dt <  DATEADD(day, 1, '2019-04-03')

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