기본 키에 대해 GUID와 ID INT를 선택할 때 ...GUID PK 삽입에 시간이 오래 걸리고 페이징이 발생합니까?
GUID를 삽입하려면 인덱스에서 순차적 인 위치를 검색해야하기 때문에 GUID 삽입에 더 오래 걸리는 것이 사실입니까? 그리고 그것은 페이징을 일으킬 수 있습니까?
이것이 사실이라면 우리는 ID INT를 모두 사용해야 만했을 것입니다.
감사합니다.
기본 키에 대해 GUID와 ID INT를 선택할 때 ...GUID PK 삽입에 시간이 오래 걸리고 페이징이 발생합니까?
GUID를 삽입하려면 인덱스에서 순차적 인 위치를 검색해야하기 때문에 GUID 삽입에 더 오래 걸리는 것이 사실입니까? 그리고 그것은 페이징을 일으킬 수 있습니까?
이것이 사실이라면 우리는 ID INT를 모두 사용해야 만했을 것입니다.
감사합니다.
더 새로운 GUID 값은 이전에 삽입 된 GUID보다 작을 수 있습니다. 예, 그렇다면 인덱스를 강제로 페이지를 확장 할 수 있습니다. INT 또는 BIGINT 자동 증가/식별 열은 ID 삽입 ON으로 하위 ID를 수동으로 삽입하지 않는 한 해당 열로 실행되지 않습니다.
당신이 NEWSEQUENTIALID를 확인 몇 가지 이유에 대한 GUID에서 변경할 수없는 경우() http://msdn.microsoft.com/en-us/library/ms189786.aspx 그것은 이전에 사용 GUID보다 더 큰를 찾을 수 있습니다. 주의해야 할 점은 "이상"부분은 시스템이 다시 시작될 때까지 유효하다는 것입니다.
브래드
난 당신이 클러스터 된 인덱스보다는 이렇게 PRIMARY KEY를 의미 생각합니다. 물론 값이 계속 증가하지 않아서 페이지 분할을 일으키지 않으므로 을 사용하면 ANY 색인이 다소 빨리 조각 나게됩니다. ,
What is fragmenting my index on a table with stable traffic?
예, NEWSEQUENTIALID()
는 순차적 인 점에서, 최소한의 GUID의 측면에서 훨씬 더 나은,하지만 :
는 여기 비 순차적 INSERT 작업의 효과가 아니라 자세한 설명을 제공 페이지 분할에 대한 보장이 아닙니다. 문제는 시작 값이 서버가 다시 시작될 때 재설정되는 값에 따라 결정된다는 것입니다. 따라서 다시 시작한 후 새 순차 범위는 이전 첫 번째 레코드보다 낮게 시작될 수 있습니다. 그 시점에서 첫 번째 INSERT는 페이지 분할을 일으키지 만 괜찮습니다.
또한 UNIQUEIDENTIFIER는 INT가 4이고 BIGINT가 8인데 비해 16 바이트입니다. 크기가 커지면 각 행이 더 많은 공간을 차지하므로 각 8k 데이터 페이지에 맞는 행이 줄어 듭니다. 새 페이지를 할당하는 데는 시간이 필요합니다. 특히 새 페이지에 맞게 데이터 파일을 확장해야하는 경우 (그리고 행이 클수록 데이터 파일이 빠르게 채워짐). 따라서 예, 처음부터 INT IDENTITY
으로 가야합니다.
GUID가 매우 유용한 외부 및/또는 휴대용 식별자가 필요한 경우 클러스터 된 PK로 INT (또는 BIGINT) IDENTITY 필드로 시작해야하며 다른 열 UNIQUE INDEX가있는 GUID 여야합니다. 이것은 대체 키로 알려져 있으며 이러한 상황에서 잘 작동합니다.
나는 "무작위"guids에서 순차적 guids로 옮겼습니다. 성능에 큰 영향을줍니다. 나는 또한 이것을 클라이언트 쪽 순차적 인 guid 생성에 사용했다. http://stackoverflow.com/questions/211498/is-there-a-net-equalent-to-sql-servers-nsequsequentialid – granadaCoder