2009-03-06 3 views
2

인덱스 만드는 방법 :제대로 나는 SQL Server 2005에서 다음과 같은 매우 큰 테이블 한

create table Blah 
(
    FirstName varchar(30), 
    Rank int, 
    Position int, 
    ... 
) 

내가 그것을에서 다음 쿼리를 실행합니다 :

declare @PassedInFirstName varchar(30) 
set @PassedInFirstName = 'SomeName' 

select TOP 1 Position 
from Blah 
where FirstName = @PassedInFirstName 
order by Rank DESC 

내가 설정하고 다음을 그것은 인덱스 :

CREATE INDEX IX_Blah ON Blah (FirstName, Rank) 

내가, 순위 DESC하여 주문 내가 내림차순 방식으로 순위를 주문하기 위해 인덱스를 변경해야 감안할 때 :

CREATE INDEX IX_Blah ON Blah (FirstName ASC, Rank DESC) 

아니면 상관 없습니까?

감사합니다.

답변

3

을 잊지 많은 행.

나는 논리적 IO는 또한

에 의해 주문을 일치하도록 INDEX에 DESC를 사용하여 50 % 감소 된 결과를 본 적이 커버에 쿼리를 변경합니다

SQL 2005 + :

CREATE INDEX IX_Blah ON Blah (FirstName, Rank DESC) INCLUDE (Position) 

SQL 2000, SQL 7 :

CREATE INDEX IX_Blah ON Blah (FirstName, Rank DESC, Position) 
+0

+1 피복 조각 – AngryHacker

2

인덱스에 순위를 내림차순으로 추가하는 것은 사소한 변화입니다. SQL 서버 아마 정렬을 사용하거나이 경우 목록의 마지막 항목으로 쉽게 반복 할 수 있습니다.

기본 키를 배치 하시겠습니까? 인덱스는 인덱싱 된 열, 기본 키 및 선택적으로 포함 된 열로 구성됩니다. Position이 기본 키가 아닌 경우 현재 색인에서 기본 키를 찾은 다음 기본 색인으로 결과를 검토하여 위치 값을 찾습니다. 위치 값을 포함 된 열로 추가하면 하나의 인덱스 만 기반으로 쿼리를 실행할 수 있어야하며 다른 인덱스는 사용되지 않습니다. 를 Where 반환하는 경우 수혜 경우

CREATE INDEX IX_Blah ON Blah (FirstName, Rank DESC) INCLUDE (Position) 

망가 등, 당신은 어떤 인덱스가 사용된다 (SQL 서버 2008 가정) 어떤 인덱스가 부족하면 그들이 당신을 말할 수, 쿼리 계획을 확인

+0

여기에는 기본 키가 없으며 고유 한 열도 없습니다. – AngryHacker

0

나는 내 이전 페이지의 인증을 엉망 ost, 내 등록 된 사용자입니다.

색인은 선택한 열과 기본 키를 기반으로합니다. 키 (이름, 순위)가 ID로 해석되는 해시 맵을 기본적으로 저장하고 있습니다 (기본 키가 Id라고 가정). 그런 다음이 ID를 사용하여 위치 값을 읽습니다.

필자의 제안은 포지션 값을 인덱스에 포함 된 열로 포함시키는 것입니다. 이렇게하면 두 번째 조회를 피하면서 색인에서 데이터를 읽을 수 있습니다.