예시)
SELECT
idx, user_id, name, reg_date
FROM TESTTABLE
WHERE user_id = '123124'
AND reg_date >= convert(datetime, getdate() - 7)
이런식으로 해당아이디의 7일전 데이터를 가져오고싶습니다
클러스트인덱스는 idx 걸려있고
비클러스트 인덱스는 id, reg_date 에 걸려있습니다.
데이터는 만건 쫌 넘습니다
실행계획을 해보면 클러스트 인덱스로만 나옵니다.
또한 저 쿼리와 다른 테이블(200건정도고정)과 조인하게되면 index scan을 타고있습니다.
index seek가 안나오네여...
저상태에서 -7일이 아니라 3으로 바꿔주면 index seek로 잡히네요.
무슨이유인지 잘모르겠네요..
Comment 4
-
쵸보
2018.06.24 18:23
네 클러스터인덱스는 idx만되있고
넌클러스터는 user_id, reg_date 로만 되있습니다.
그렇다면 데이터가 점점 늘어나면 클러스터 인덱스로만은 느려질것같은데..
혹시 넌클러스터 인덱스로 타게되나요?
-
네, 가능합니다. 커버드 인덱스에 대해 검색해 보시면 좋을 듯 합니다.
-
혹은 쿼리를 분할하는 방법도 있습니다. cte로 넌클만 이용한 쿼리를 작성해서 본 테이블과 조인하면 되겠네요. 인덱스는 타겠지만 성능은 만족할 만한 수준이 나오지 않을 수 있습니다.
넌클러스터 인덱스는 user_id, reg_date 로만 되어 있나요?
클러스터 인덱스가 idx라면 위의 증상은 정상일 수 있습니다.
넌클러스터 인덱스로 커버되지 않기 때문에 인덱스를 이용하지 않는게 오히려 빠르다고 판단하여 풀스캔 한거라 생각되네요~