-- MSSQL
명시적으로 인덱스 지정하기
어린왕자악꿍
2008. 11. 10. 19:36
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
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