2013-03-28 2 views
0

데이터베이스에 관심이 있고 SQL Server 2008을 사용하기 시작했습니다. 테이블의 적절한 인덱스를 사용하면 데이터베이스의 전반적인 성능을 향상시킬 수 있습니다.SQL Server 인덱스 성능

Customer         Renters 
CustomerID (PK)        RentersID (PK) 
ForeName (Non clustered index)    StartDate 
SurName          EndDate 
Email          RentalNights 
              CustomerID (FK) (Non Clustered index) 

I을 다음과 같이

나는 두 개의 테이블이 있고 자동 SQL 데이터 생성기를 사용하여 각 테이블에 1 개 백만 행을 생성은, 표 1은 고객 테이블과 표 2는 임대인의 테이블, 디자인은 가장 일반적으로 사용되는 열뿐 아니라 외래 키 열에 비 클러스터형 인덱스를 배치하면 성능을 향상시키는 데 도움이 될 것이라고 읽었습니다. 나는 인덱스를 사용하기 전에 인덱스를 사용하기 전에 간단한 조인 쿼리를 만들었지 만 인덱스를 사용할 때 향상된 성능을 보지 못했습니다. 어떤 시체가 나를 도울 수 있습니까? 아래의 이미지는 인덱스 이전 및 이후의 실행 계획입니다.

하기 전에 인덱스 : 인덱스 후 enter image description here

: 이 enter image description here

편집 : 이것은 내 인덱스 이 내가

SELECT cu.ForeName + ' ' + cu.SurName AS 'Name' 
FROM dbo.Customers cu 
INNER JOIN dbo.Renters re ON re.CustomerID = cu.CustomerID 
WHERE cu.ForeName = 'Daniel' 

편집 을 사용하고있는 SQL 구문입니다 구문을 사용하여 NES 아래의 회신에 게시에게 : 귀하의 요청을 바탕으로

CREATE NONCLUSTERED INDEX [ix_Customer] ON [dbo].[Customers] ( [ForeName] ASC, [CustomerID] ASC ) INCLUDE ([SurName]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO

+0

이러한 실행 계획을 이끌어 낼 수있는 ** SQL 쿼리 **도 표시 할 수 있습니까? –

+0

인덱스 코드도 표시 하시겠습니까? – JNK

+0

또한 인덱스를 사용하는 것처럼 보이지만 성능은 동일합니까? 두 쿼리를 실행하는 데 동일한 시간이 걸립니까? – JNK

답변

4

구축 할 수있는 최적의 클러스터되지 않은 인덱스는 다음과 같습니다

CREATE NONCLUSTERED INDEX ix_IndexA on dbo.Customers (Forename, CustomerID) 
    INCLUDE (SurName) 

CREATE NONCLUSTERED INDEX ix_IndexB on dbo.Renters (CustomerID) 

당신은 당신의 키 필드가 필터 또는 JOIN 열을가되고 싶어요, INCLUDE 열은 리프 수준에 있으며 SELECT에 반환됩니다.

+0

안녕하세요 @JNK, 나는 당신에게 INCLUDE (SurName)에 대해 물어보고 싶습니다. 그리고 이것이 내가 100 % 확신하지 못하는 이유는 무엇입니까? – Peter

+1

@Peter'INCLUDE'는 인덱스의 리프 레벨에있는 INCLUDED 컬럼에 대한 데이터를 유지하지만 트리에는 저장하지 않습니다. 전화 번호부와 같은 인덱스를 생각하면'성, 이름 '(어떻게 정렬되는지) 리프 레벨 (항목)에는 'PhoneNo, Address, Zipcode'데이터도 있습니다. 'PhoneNo'로 분류 할 수는 없지만 그 항목에 도착하면 그 데이터를 가지고 있습니다. 귀하의 질의에 당신은 성을'선택 '하고 있지만 귀하의 색인 키에 포함되어 있지 않으므로 그것을 정렬하지 않으므로 포함 시켰습니다. 이렇게하면 엔진이 클러스터 된 인덱스에서 데이터를 쿼리하는 키 조회 또는 책갈피 조회를 피할 수 있습니다. – JNK