CREATE TABLE [dbo].[test](
[idx] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](10) NULL,
[regDate] [datetime] NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
이 테이블에
create index index_test1 on test(regDate)
이렇게 인덱스를 걸었습니다.
1 AAA 2013-07-15 12:09:45.810
2 BBB 2013-07-15 12:10:02.687
이런 식으로 데이터가 들어가 있습니다.
여기서 오늘 날짜 데이터를 가져올려고 하면
1. select * from test where convert(varchar(10),regDate,23) = convert(varchar(10),getdate(),23)
이런식으로 가져올 수가 있는데 이 쿼리는 위의 인덱스 index_test1 넘을 타지 않더군요,, 아마도 convert()이넘 때문에
인덱스를 못타는 거 같은데 좋은 방법 없을까요?
혹시 몰라서
select * from test where regdate like '%'+convert(varchar(10),getdate(),23)+'%'
요런식으로 해봤는데 역시 안되더군요.,...
고수님들 조언좀 부탁드립니다 ^^
컬럼을 가공하면 인덱스를 타지 않습니다.
LIKE 왼쪽 % 붙여도 마찬가지이지요..
23번이면 YYYY-MM-DD 형식인거 같은데..
테이블 컬럼 속성을 CHAR(10)으로 만들어서 YYYY-MM-DD 형식으로 저장 후 WHERE 조건을 regDate = convert(varchar(10),getdate(),23) 하시면 Index 탈겁니다.