2012-07-02 3 views
1

나는 다음과 같은 라인을 발견 : 테이블의 데이터가 클러스터 된 인덱스의 구조에 따라 정렬되어 있기 때문에주문은 <a href="http://sqlserverpedia.com/wiki/Choosing_Index_Keys" rel="nofollow">SQLServerpedia</a>에서 인덱스 키</strong>를 선택 기사 <strong>에서

, 인덱스에 내장 last_name, first_name은 first_name, last_name에 빌드 된 것과 동일한 방식으로 작동하지 않습니다. 가장 선택적인 열을 먼저 지정해야합니다.

왜? a, b의 인덱스가 b의 인덱스와 다른 이유는 무엇입니까? 조합의 고유성은 어느 쪽이든 동일하게 유지됩니다. 왜 우선 순위가 낮은 조합을 지정해야합니까?

+2

설명은 여기 [http://sqlserverpedia.com/wiki/Index_Selectivity_and_Column_Order]에서 찾을 수 있습니다. –

+0

우수한 링크. 감사! – SexyBeast

답변

4

고유성은 동일하지만 문서에서 동작을 언급합니다. 전화 번호부에 대해 생각해보십시오. 존 스미스를 찾고 있다면 스미스를 먼저 찾은 다음 이름 = 존으로 좁히는 것이 훨씬 쉽습니다. 다른 방법으로 해보십시오. 모든 존스를 찾은 다음 스미스가 어떤 것인지 파악하십시오.

따라서 일반적으로 성으로 사람을 검색하는 경우 성을 기준으로 색인을 순서대로 지정하는 것이 좋습니다. 이렇게하면 동일한 마지막 이름은 모두 동일한 색인 페이지 집합에있게됩니다.

이는 고유 인덱스와 고유하지 않은 인덱스 모두에 적용됩니다. 인덱스 키 컬럼의 고유성은 순서가 무엇이든 관계없이 강제 실행됩니다. 또한 모든 열이 항상 키의 일부가 될 필요는 없다는 것을 명심하십시오. 때때로 열을 포함시키는 것만으로도 유용 할 수 있습니다.

두 명의 존 스미스가 뉴스 레터에 가입하거나 회사에서 일하는 것을 막을 수있는 가능성이 거의 없기 때문에 색인은이 특별한 경우에 고유하지 않아야한다고 생각합니다. 또는 싸우는 클럽에 가입 - 마지막/처음 좋은 키가 아닙니다.

+0

감사. 도움이되었습니다. – SexyBeast

+1

아마도 클러스터 된 키와 기본 키가 동일 할 필요는 없으며 클러스터 된 키가 고유 할 필요는 없다고 언급해야합니다. 키에서 가장 선택적인 열을 먼저 선택하는 이유는 SQL 서버 내부와 관련이 있습니다. lastname, firstname을 클러스터 된 키로 선택하는 이유는 어떤 유형의 쿼리를 실행할 가능성이 높기 때문입니다. –