안녕하세요.
sqler에서 항상 많은 도움을 얻는 개발자입니다.
SQL 2012에서 작업중인 내용이 있는데 개인적으로 해결이 힘들어 이렇게 질문을 올립니다.
일단 다음과 같은 테이블이 있습니다.
CREATE TABLE [dbo].[SHOW_MYSCRE_OFF](
[idx] [bigint] IDENTITY(1,1) NOT NULL,
[UserIdx] [bigint] NULL,
[regTime] [datetime] NULL
) ON [PRIMARY]
여기에 약 100만건의 테스트 데이터를 집어 넣은 후에 오늘 날짜에 해당되는 로그의 수를 추출하기 위해 다음과 같이 쿼리를 하였습니다.
SELECT COUNT(*) FROM SHOW_MYSCRE_OFF WHERE Useridx = 100 and regTime >= convert(nvarchar(20),getdate(),112)
그리고 프로파일러에서 확인을 해보니
cpu : 31,
reads : 1957,
durate : 38
로 상당히 수치가 높게 나옵니다.
아래와 같이 했더니 더 심하더군요..
SELECT COUNT(*) FROM SHOW_MYSCRE_OFF WHERE Useridx = 100 and datediff(day, regtime, dateadd(day, 0, getdate())) = 0
cpu : 249 ,
reads : 1781,
durate : 305
UserIdx와 regTime에는 모두 인덱스를 걸어놨습니다.
일단 맨처음 쿼리로 진행을 하고 있습니다만 100만건 이상의 데이터에서 저정도 속도가 정상적인지 잘 모르겠습니다.
쿼리 속도 개선을 할수 있는 방향이 있을지 궁금합니다.
고수님들의 도움 부탁드립니다. ㅠㅠ
감사합니다.
자답이라면 자답인데 Useridx 칼럼을 클러스터형으로 인덱스를 변경해 주니 cpu 점유율과 처리 시간이 확 줄어드네요.
아직도 인덱스는 어렵습니다.. ㅠㅠ