2011-02-11 2 views
2

Paul S Randal의 인덱스 조각화 동영상 (here)을보고 있습니다. 비디오에서 바울은 GUID or other random values as high-order key will cause page splits which in turn will cause index fragmentation라고 말했습니다. 그 이유는 무작위 값은 새 레코드가 임의의 페이지에 삽입되어 임의의 페이지에서 페이지가 분리되는 것을 의미하기 때문입니다. 내 질문 : 새 레코드가 임의 페이지에 삽입되지 않으면 페이지 분할이 여전히 발생할 수 있습니다. 맞습니까? 이것이 사실이라면 두 경우의 차이점은 무엇입니까?(SQL Server) 상위 키로 GUID 또는 다른 임의 값을 사용하면 조각화가 발생하는 이유는 무엇입니까?

현재, 상위 키 평균은 primary key입니까? 나는 영어 원어민이 아니며 확실하지 않습니다.

감사합니다.

답변

3

인덱스 데이터는 사용 된 키에 클러스터됩니다. 인덱스는 복합 요소가 될 수 있고 첫 번째 멤버가 주문에서 가장 중요하기 때문에 여기에서 "고위"를 언급합니다.

따라서이 멤버가 무작위 인 경우 (암호 녀석이 GUID에 대해이 용어가 마음에 들지 않아도 GUID가 임의로 표시되어야하는 경우) 연속 값을 삽입하는 경우보다 훨씬 더 자주 나누기가 발생합니다. 값이 범위의 말미에없는 경우

(NEWID() 대신 NEWSEQUENTIALID()을 사용하면 클러스터 된 기본 키의 GUID를 사용할 때 삽입 성능이 크게 향상됩니다).

1

키가 순차적이면 데이터가 모두 끝에 추가됩니다. 즉, 필요에 따라 새로운 페이지가 생성됩니다. 그러나 이는 대용량 시스템에서 데이터가 푸시되고있는 "핫스팟"을 만듭니다. 이를 해결하려면 일종의 분류 필드에 클러스터 된 인덱스를 추가 한 다음 기본 키를 증가시키는 것입니다.

+0

아니요. 핫 스폿은 캐시 수명이 길다는 것을 의미하는 반면 분류 필드는 GUID처럼 쓰기 및 분할을 의미합니다. "그것은 다릅니다"더 정확한지 ... – gbn

관련 문제