2014-07-25 2 views
0

다른 순서로 열을 사용하면 더 많은 열에 대한 테이블 인덱스를 만들 때 차이가 있습니까?SQL Server 테이블 인덱스 열 순서

인덱스는 ID, isValid, CreatedID, Created, isValid과 정확히 일치합니까?

쿼리 순서에 차이가 있습니까?

where ID = 123 
    and isValid = 1 
    and Created < getdate() 

where ID = 123 
    and Created < getdate() 
    and isValid = 1 

열 유형 : ID는 [INT]는 생성, [비트]을 isValid [날짜])

+1

'ID, isValid, Created '가 필요합니다. 그러므로 처음 두 칼럼을 찾으십시오. –

답변

2

가 정확히 차이 인 ID, isValid, CreatedID, Created, isValid 색인?

당신은 항상 당신의 WHERE 절에 열을 사용하는 경우 - 차이가 없습니다.
(마틴 스미스와 같은 그의 의견에서 지적 - 동등 검사, 인덱스의 열 순서 문제 않습니다하지 않은 기준 때문에) 그러나

: 인덱스는 지금까지 사용 할 수 있습니다 가장 왼쪽에있는 n 개의 열 (여기에서 : 1과 3 사이의 n)이 사용되는 경우

는 만 쿼리에 대한 IDisValid를 사용할 수있는 쿼리가 그렇다면, 최초의 인덱스 사용할 수 있습니다 -하지만, 두 번째는 결코 것은 확인에 사용됩니다.

그리고 당신은 그 두 번째 인덱스 사용될 수있는 자신의 WHERE 매개 변수로 IDCreated를 사용하는 쿼리를 가지고 있지만, 첫 번째가 사용되지 않을 수있는 경우.

+0

모두 평등 술어가 아니기 때문에 차이가 있습니다. –

+0

@MartinSmith : 그렇습니까? 더 설명 할 수 있습니까 (또는 설명을 가리킬 수 있습니까)? 따라서 여기에 두 인덱스 중 어느 것이 좋을까요? 결국 부등호 열이 '생성됨'입니까? –

+0

예. 효율성을 극대화하기 위해 마지막에 만들려고합니다. 처음에'

1

AND은 교환 가능하므로 WHERE에 AND 식의 순서는 중요하지 않습니다. 색인의 열 순서가 일 경우 일 때 검색어와 일치해야합니다.

ID이 테이블의 클러스터 된 기본 키이고 쿼리가 특정 ID을 요청하는 경우 인덱스를 만들지 마십시오. 그것은 "123 페이지 123에 123"등의 색인을주는 것과 같습니다.

1

질의의 순서는 차이가 없습니다. 색인의 순서가 차이를 만듭니다. (IsValid 인덱스를 생성,

ID IsValid Created 
=== ======= ========= 
122 0  Jan 4 
122 0  Jan 3 
... ...  ... 
123 0  Jan 4 
123 0  Jan 3 
123 0  Jan 2 
123 0  Jan 1 
123 1  Jan 4 
123 1  Jan 3 
123 1  Jan 2 <-- Your data is here... 
123 1  Jan 1 <-- ... and here 
... ...  ... 

ID Created IsValid 
=== ======= ======== 
122 Jan 4 0 
122 Jan 4 1 
... ...  ... 
123 Jan 4 0 
123 Jan 4 1 
123 Jan 3 0 
123 Jan 3 1 
123 Jan 2 0 
123 Jan 2 1  <-- Your data is here... 
123 Jan 1 0 
123 Jan 1 1  <-- ... and here 
... ...  ... 

아마 당신은 말할 수 :이 텍스트에서 어떻게 보이는지 잘 모르겠지만 여기에 표시됩니다 : 여기

where ID = 123 and isValid = 1 and Created < Date 'Jan 3' 

가능한 인덱스의 커플 Created, ID) 또는 기타 주문을하면 데이터를 훨씬 더 분리 할 수 ​​있습니다.일반적으로 가장 자주 실행되는 쿼리에 대해 데이터를 가능한 한 "복잡하게"만들기 위해 인덱스를 디자인하려고합니다.