인덱스 생성을 연습중인데
idx라는컬럼에다가 클러스터 인덱스를 걸었습니다.
문제는 아래와 같은 쿼리를 쓰면
select idx,num,title from table with(nolock) where idx>0 order by idx desc
실행계획에 index seek가 나오는데
select idx,num,title from table with(nolock) where idx>0 order by idx desc,step asc
이런식으로 order by 절에 조건을 하나더 추가하면
실행계획에 sort가 추가 되고 index가 scan으로 바뀌는데 어떻게 해야 이걸 해결할수 있을지 모르겠습니다.
nonclustered로 step에 인덱스 주고 idx 인클루드 해봐도 결과는 똑같고 방법을 알려주시면 감사하겠습니다.
Comment 4
-
이리
2018.10.02 18:31
-
카루카루
2018.10.02 18:43
답변 감사합니다 저 죄송한데 생성 구문좀 알려주실수 있으실까요?
CREATE CLUSTRED INDEX idx_index
ON table(idx desc,step asc) 형식으로 생성하면 되는걸까요?
-
Harlem
2018.10.04 13:54
인덱스 선택시 고려할 사항이 많습니다.
해당의 경우라면 굳이 클러스터드 인덱스로 생성하게 되면 해당 내용 기준으로 테이블이 정렬 되기 때문에
잦은 체이닝이 일어나서 오버헤드가 일어날 수 있습니다.
만약 굉장히 잦은 쿼리라면 아래와 같은 형태로 미리 쿼리의 결과를 인덱싱 해놓을 수 있겠죠.
INCLUDE절을 사용하여 CLUSTERD 인덱스와 룩업도 없앨 수 있습니다.
CREATE INDEX ix_index1
ON table(idx desc,step asc)
CREATE INDEX ix_index2
ON table(idx desc,step asc) INCLUDE (num,title)
-
카루카루
2018.10.04 14:05
와 감사합니다. 정말 게시판에 인덱스를 걸려고 하다보니 상세 검색등 조건이 많을땐 어찌해야 하나 고민도 되고 우선 간단한 게시판부터 해보려고 했는데 여기서부터 막혀서 어떻게 해야 할지 힘들었었는데 감사해요.
idx desc,step asc 혹은 idx asc, step desc 로 인덱스 생성을 하시면 sort가 없어질겁니다.