당신은 거의 확실 데이터베이스의 모든 테이블에 클러스터 된 인덱스를 설정합니다. 테이블에 클러스터 된 인덱스가없는 경우이를 "힙"이라고하며 대부분의 일반 쿼리 유형의 성능은 less for a heap than for a clustered index table입니다.
클러스터 된 인덱스를 설정해야하는 필드는 테이블 자체와 테이블에 대해 예상되는 쿼리 사용 패턴에 따라 다릅니다. 거의 모든 경우에 클러스터형 인덱스가 고유 한 열 또는 열의 조합 (예 : 대체 키)에 있어야합니다. SQL이 아닌 경우 SQL은 고유 한 값을 끝에 추가합니다. 필드를 선택하십시오. 테이블에 여러 레코드를 선택하거나 필터링하기 위해 쿼리에서 자주 사용되는 열이있는 경우 (예 : 테이블에 판매 트랜잭션이 포함되어 있고 응용 프로그램이 제품 ID별로 판매 트랜잭션을 자주 요청하거나 더 나은 경우) 거의 모든 경우 특정 송장에 대한 모든 세부 레코드를 검색 할 인보이스 세부 정보 테이블 또는 특정 고객에 대한 모든 송장을 자주 가져 오는 송장 테이블 ... 여기서 선택하는 것은 큰지 단일 값으로 레코드 수 또는 값 범위로)
이 열은 클러스터 된 인덱스의 후보입니다. 클러스터 된 인덱스의 열 순서는 매우 중요합니다. 인덱스에 정의 된 첫 번째 열은 예상 쿼리에서 처음에 선택되거나 필터링되는 열이어야합니다.
이 모든 이유는 데이터베이스 인덱스의 내부 구조를 이해했기 때문입니다. 이러한 인덱스를 균형 트리 (B-Tree) 인덱스라고합니다. 트리의 각 노드는 두 개가 아닌 임의의 수의 항목 (및 하위 노드)을 가질 수 있다는 점을 제외하면 이진 트리와 매우 유사합니다. 클러스터 된 인덱스를 다른 것으로 만드는 것은 클러스터 된 인덱스의 리프 노드가 테이블 자체의 실제 실제 디스크 데이터 페이지라는 것입니다. 비 클러스터형 인덱스의 리프 노드는 테이블의 데이터 페이지를 "가리 킵니다".
테이블에 clsutered 인덱스가있는 경우 테이블 데이터 페이지는 해당 인덱스의 리프 수준이며 각 인덱스는 이전 페이지와 인덱스 순서의 다음 페이지에 대한 포인터를 갖습니다 연결된 목록).
쿼리가 clustered 인덱스와 동일한 순서의 행 범위를 요청하면 ... 프로세서는 인덱스를 한 번만 (또는 두 번) 탐색하고 데이터의 시작 페이지를 찾고, 필요한 모든 데이터 페이지를 읽을 때까지 링크 된 목록 포인터를 따라 다음 페이지와 다음 페이지로 이동하십시오.
클러스터되지 않은 인덱스의 경우 검색하는 모든 행에 대해 한 번 인덱스를 탐색해야합니다.
참고 : EDIT
Guid 키 열의 순차적 문제를 해결하려면 SQL2k5에 GUID를 "이전"순차 방식으로 생성하는 NEWSEQUENTIALID()가 있음을 알아 두십시오.
또는 지미 Nielsens COMB에게 클라이언트 측 코드에서 구현되는 GUID algotithm 조사 할 수 있습니다 :
COMB Guids
Paul Randal의 다음 게시물을 살펴보십시오. [임의의 GUID에 대한 클러스터 된 인덱스 또는 클러스터되지 않은 인덱스?] (http://www.sqlskills.com/blogs/paul/clustered-or-nonclustered-index-on-a-random-guid/) – Lijo