MS-SQL 은 이상하게 쿼리가 조금만 복잡해지면 인덱스를 제대로 타지 못하는 경우가 종종 발생하는데, 그 경우에 제대로 된 인덱스를 타게 하려면 다음과 같이 한다. (특히 JOIN 을 사용할 경우 ON 절에 들어가는 필드가 PK 가 아닐 경우에 인덱스를 안탈 수 있는데, 이럴 때 유용하게 사용할 수 있다)
SELECT * FROM ALLBLOG WITH(INDEX(IX_ALLBLOG_BLOG))
WHERE BLOG=7777777
이렇게 하면 IX_ALLBLOG_BLOG 라는 인덱스를 강제로 타서 결과를 리턴한다.
복잡한 쿼리를 만들 때는 반드시 다음과 같은 옵션들을 사용해서 인덱스를 잘 타고 있는지, 부하는 어느정도 들어가고 있는지를 파악할 수 있도록 한다.
SET SHOWPLAN_ALL ON
SET STATISTICS IO ON
SET STATISTICS TIME ON
오늘 오타나서 살짝 고생한김에 정리해봄..ㅡ,ㅡ;;;


January 29th, 2007 at 11:39
MS-SQL은 힌트를 명시적으로 주지 않는걸 권장하는것으로 알고 있습니다. (MS 차원에서) 통계를 정리해보시거나 인덱스 rebuild를 해보시죠.
January 29th, 2007 at 12:13
키엘 / 감사합니다. 그걸 했는데도 여전히 느리더라구요. 그래서 저 방법을 썼는데, 무지 빨라지더군요. 저게 적당한건지 뭐가 잘못되서 그런건지는 아직도 모르겠습니다..머리가 나쁘면 손발이 고생한다더니…흑.. ㅜ_ㅜ
November 15th, 2007 at 23:08
세상에서 오라클이 최고야~를 외치는 저이지만 그래도 MS-SQL의 Optimizer가 멍청하다고 생각하진 않습니다.
인덱스를 타지 않도록 하는 다른 원인이 있지 않을까요?