2009-05-06 4 views
1

실행하는 데 시간이 오래 걸린 보고서가 있습니다. 필자는 데이터베이스 엔진 조정 권고자를 실행했으며 권장 사항 중 하나는 2 개의 인덱스를 만드는 것이 었습니다. 그러나 색인이 동일한 열이지만 다른 순서로 나타났습니다. 여기 SQL Server 2005에서 같은 열을 다른 순서로 인덱싱합니다.

는 테이블 :

---Locations--- 
| *LocationID | 
| Code  | 
| ...more... | 
| DivisionID | 
| RegionID | 
--------------- 

과 추천

CREATE NONCLUSTERED INDEX [IX_Locations_Region_Loc_Div] ON [dbo].[Locations] 
(
    [RegionID] ASC, 
    [LocationID] ASC, 
    [DivisionID] ASC 
) 
INCLUDE ([Code]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 
GO 

CREATE NONCLUSTERED INDEX [IX_Locations_Loc_Reg_Div] ON [dbo].[Locations] 
(
    [LocationID] ASC, 
    [RegionID] ASC, 
    [DivisionID] ASC 
) 
INCLUDE ([Code]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 
GO 

가 왜 SQL 서버는 그들이 다른 순서에있는이 3 열 인덱스를 가질 필요가 이들 2 개 인덱스 추가했다 내부 조인에만 사용됩니까?

SELECT UserID, LocationID FROM [User] u INNER JOIN [Locations] l ON u.LocationID = l.LocationID 

답변

2

포함 된 SQL에 해당하지 않습니다. 그 reccomendation을 만들기 위해 고려하고있는 다른 쿼리가 있어야합니다.

0

튜닝 엔진을 실행할 때 문에 where 절이 있습니까? 나는 또한 명령문에 order by 절을 넣고 데이터베이스/튜닝 엔진이 인덱스를 가장 잘 정렬하는 방법을 알 수 있는지 알아 보겠다.

0

질문에 대답하는 한 가지 방법은 SQL Server Management Studio에서 쿼리를 실행하기 전에 인덱스를 추가 한 다음 인덱스를 추가하는 것입니다. 유용한 정보가 아니라면 항상 흥미 롭습니다.

0

2005 년은 확실하지 않지만 SQL Server의 이전 버전에서는 where 절의 열이 열의 순서와 동일한 순서로 사용되는 경우에만 인덱스를 선택한다는 것을 알고 있습니다. 색인 그것을 좋아하지 않지만 그것을 증명했습니다.

그냥 조인에 대해 얘기하고있는 것으로 나타났습니다. 당시 ANSI 구문을 사용하는 대신 where 절에 조인을 작성 했으므로 여전히 적용됩니다.

관련 문제