2009-12-11 4 views
2

카디널리티는 복합 인덱스에서 어떤 역할을합니까? 그렇다면, 무엇?복합 인덱스 및 카디널리티에 관한 전략

나는 두 개의 컬럼에 결합 된 쿼리를 실행하고 그것이 내가 SUP-최적의 인덱스로 생각 무엇을 사용, 그래서

이의 우리가 가지고 있다고 가정 해 봅시다 ... I 인덱스를 설계하는 방법을 나에게 다시 생각 만들고있다

미국 내 도시을 모두 나열한 표. 우리가 이제까지 한 도시 모두를 조회해야하는 경우, 그것은 아마 인덱스를 대상 것이라고 - 그래서 여기 내 첫 번째 본능 (>도시)에 클러스터 된 인덱스를 만드는 것입니다. 또한 도시상태 (여기서 우리는 시, 상태은 고유 한 쌍임)을 지정하는 쿼리의 훌륭한 인덱스가 될 것입니다.

본질적으로 특별 도시의 목록을 제공 한 테이블에 가입하는 쿼리가 실행되었습니다. 이 부분은 도시 표의 하위 집합입니다. Special.CitySpecial.State에 대한 조인을 지정하고 있지만 클러스터 된 인덱스 대신 CITY 테이블의 기본 키 인덱스 (자동으로 SQL 서버에서 생성 됨)를 사용한다는 점이 놀랍습니다. 내가 만든. 어째서? 나는 또한 좋은 인덱스가 높은 카디널리티이 들었습니다

...

그래서 내가 클러스터 된 인덱스 (또는 다른, 별도의 인덱스)가 작성되어 있어야합니다 경우 궁금하네요 ( 시 -> 주) 도시은 카디널리티가 높고 차별화됩니다 ( ). 상태은 버킷의 첫 번째 시리즈에 있습니다.

특정 하위를 대상으로하는 쿼리와 특정 부모에 대한 모든 자식을 가져 오는 쿼리에 혜택을주기 위해 도시와 국가와 같은 부모 - 자식 관계에서 항상 부모 -> 하위에 클러스터형 인덱스를 만드는 것이 좋습니다. 여기서 뭔가를 재고해야합니까? 약동학 인덱스보다 소폭 저렴했다 -

비공식 테스트 (>도시)에 대한 인덱스가 있음을 보여준다.

답변

1

일부의 생각 :

  • 당신은 "도시"에서 모든 열 또는 단지 도시와 국가를 요청 않았다 "특수 도시"에 가입하면?즉, 무엇을 다룹니까?

  • "특수 도시"의 색인 또는 PK 순서는 무엇입니까?

  • 어디에서 필터링 했습니까?

컬럼의 기본은 비록 역할을 할 수 있습니다 잔류 조회를 위해 Craig Freedman's blog entry을 참조하십시오. 그리고 another one.

그리고는 BOL에서 언급 한 것 당신이 테이블과 복합 키의 여러 레이어를 사용하는 경우

그러나,이 무너지게하여 첫 선택해야한다고 (하지만 그것을 찾을 수 없습니다). 예 :

  • 테이블 할아버지 (GrandDadID, ...)
  • 테이블 아빠 (GrandDadID, DadID, ...)
  • 테이블 아들 (GrandDadID, DadID, SonID, ...)

PK for Son은 상위 테이블 모두에 대한 FK 필요를 처리합니다.

DadID와 SonID가 선택적인 GrandDadID이어야하므로 "Dad"와 "Son"의 순서를 반대로 바꾸면 쿼리와 FK DRI를 다루는 데 더 많은 색인이 갑자기 필요합니다.

그래서 :

+0

이 재미있다 ... "이 달려있다"어, 열 카디널리티는 역할을하지만, 그것은 단지 하나 개의 요소이고! 그 사람은 색인 생성에만 전념하는 블로그가 있습니까? 그건 미친 짓이야. 많은 감사합니다! –

+0

@ 마크 : 색인 만이 아닙니다. 그가 한 일을 읽으십시오 : http://blogs.msdn.com/craigfr/about.aspx – gbn

+0

또한 귀하의 예에서, DadID에 주어진 관계에 암시적인 Son.GrandDadID가 아닙니까? –

0

(ID 대용 암호 키에 관한 먼치 킨 PK와 달리) 인덱싱의 종류는 웜이 될 수 있습니다. 사람은 몇 시간 동안 주제에 글을 쓸 수 있으며, 상황에 도움이 될만한 말을 할 필요는 없습니다. 색인 생성에 관한 기사를 읽고 많은 실험을하는 것이 최선의 방법 일 수 있습니다.

별로 도움이되지 않습니다. 내가 간결한 보편적 인 진실을 생각할 수 있다면, 나중에 이것을 업데이트 할 수있다.