명시적으로 인덱스 지정하기

-- MSSQL 2008. 11. 10. 19:36
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
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

SELECT *
FROM ALLBLOG WITH(INDEX(IX_ALLBLOG_BLOG))
WHERE BLOG=7777777

SET STATISTICS TIME OFF
SET STATISTICS IO OFF
SET SHOWPLAN_ALL OFF

* 출처에 댓글을 보니 MS에서 인덱스를 명시적으로 지정하는 것을 권장하지 않는다고 하네요.

출처 http://hacker.golbin.net/wp/archives/622

'-- MSSQL' 카테고리의 다른 글

MSSQL 2000, 2005 SA 암호변경  (0) 2008.11.28
(T-SQL) 서버 측 동적 쿼리에서의 탈출  (0) 2008.11.21
SET SHOWPLAN_TEXT ON  (0) 2008.11.10
COUNT(*)와 COUNT(컬럼명)  (0) 2008.11.10
SET NOCOUNT ON  (0) 2008.11.07
posted by 어린왕자악꿍