관리 메뉴

I LOVE EJ

MSSQL - with index를 이용한 인덱스 강제 설정 본문

Data Base/MsSql 2005

MSSQL - with index를 이용한 인덱스 강제 설정

BeOne 2009. 1. 13. 15:34

환경

MSSQL Server 2005 Standar


문제 : 인덱스를 잘못 타서 결과가 늦게 온다.

         인덱스를 내가 원하는 것으로 선택이 가능할까?


Database 스키마

클러스트인덱스 : EndDate

논클러스트인덱스 : AccountID


가끔씩 쿼리를 만들어서 날리는데 인덱스를 엉뚱한걸 타거나 테이블을 풀스캔을 할 때가 있다.

이럴땐 똑똑한 SQL이라도 가끔은 멍청해보일때가 있다고 생각된다.

엉뚱한녀석...


사용자 삽입 이미지

사용자 삽입 이미지

4천만건의 테이블중에서 서브쿼리로 2천만건을 긁은 후 테이블을 조인을 하는 무식한 방법으로 조인을 해서

저 쿼리 하나로 인해 SQL을 먹통으로 만들어 버린다.

분명 클러스트인덱스가 걸려있는 날짜조건을 줬지만 SQL은 이상하게 많은 레코드를 반환을 해온다.

인덱스를 바꿔보고 싶다.

어떻게?

----------------------------------------------------------

select * Tables with (index=INDEX NAME)

----------------------------------------------------------

위와같이 하면 된다.



사용자 삽입 이미지

사용자 삽입 이미지

인덱스를 클러스터인덱스가 걸려있던 EndDate에서 논클러스트인덱스인 AccountID를 타도록 수정을 변경을 했더니

쿼리는 더욱 쉽게 결과를 반환을 하게 되었다.

결과도 30초가 넘던 것이 0초만에 나온다.