2009-10-07 4 views
0

쿼리 분석기를 사용하여 테이블의 인덱스 성능을 비교하는 방법은 무엇입니까?SQL Server : 인덱스 성능 비교

인덱스를 사용하고 한 번 사용한 후 동일한 실행 쿼리를 두 번 실행하고 싶습니다. 생성 된 테이블 스캔/인덱스 스캔을 비교할 수 있습니다.

나는 CREATE INDEX ..., SELECT ..., DROP INDEX ..., SELECT를 시도했다. 첫 번째 쿼리는 인덱스를 사용하고 두 번째 쿼리는 인덱스가 없기를 기대하지만 두 실행 계획 모두 인덱스를 사용할 것입니다.

답변

1

나를 위해 일한 기술은 FROM 절에 WITH 키워드를 사용하는 것이 었습니다. 인덱스가 생성

:

SELECT * FROM table WHERE ... 

SELECT * FROM table WITH (INDEX(0)) WHERE ... 

첫 번째 질의 (아마) 인덱스를 사용하는 것, 두 번째는하지 않습니다. 다음과 같이 여러 개의 인덱스를 사용할 수도 있습니다.

SELECT * FROM table WITH (INDEX(IX_test1)) WHERE ... 

SELECT * FROM table WITH (INDEX(IX_test2)) WHERE ... 
1

구성 도구에서 SQL Server 프로필러를 사용하십시오. 인덱싱을 사용하거나 사용하지 않고 쿼리를 실행하고 함수 호출의 데이터 읽기/쓰기 타이밍 등을 기록하십시오. 색인이 성능이 향상되면 (읽기/대기 시간이 짧음)

3

색인이없는 경우 사용할 수 없습니다. 그러나 인덱스는 두 번째 선택에 대한 예상 실행 계획에 대해 여전히 존재하므로 평가됩니다. DROP INDEX 계획도 단지 추정치 일뿐입니다.

어쨌든 실제 실행 계획을 사용하고 싶습니다. 개인적으로 예상치 못한 결과가 나기 때문입니다.

SET SHOWPLAN TEXT을 사용하면 쿼리 창에서 실제로 사용 된 것을 캡처 할 수 있습니다 (또는 그래픽을 사용). 또한 SET STATISTICS IO을 자주 사용하고 SET STATISTICS TIME도 사용합니다.

1

쿼리 창의 시작 부분에 사용하십시오. 어떤 계획 캐시도 지울 것입니다.

dbcc freeproccache 
go 
dbcc dropcleanbuffers 
go 

그래서 맨 위에 표시 한 다음 dreat 및 drop 인덱스 코드를 주석에 넣은 다음 쿼리하십시오. 인덱스없이 초기에 실행하고 그 모습을 본 다음, 인덱스를 작성하여 다시 실행하십시오.

예, 실제 실행 계획을 사용하고 클라이언트 통계를 사용할 수도 있습니다.