2009-06-19 8 views
1

주로 정렬되지 않은 GUID를 기본 키 값의 대다수와 클러스터 된 인덱스 (성능에 좋지 않음)로 사용하는 brown-field SQL Server 2005 데이터베이스가 있습니다.모든 비 순차 GUID를 순차적 GUID로 바꾸는 방법은 무엇입니까?

순차 GUID로 변경하려면 어떻게해야합니까? 문제 중 하나는 각각의 기본 키를 변경하면서 모든 외래 키 값을 대체하는 것입니다.

이 유형의 변환을 수행하는 데 필요한 도구 나 스크립트를 알고 계십니까?

답변

5

경우에만 그렇게 2 열이있는 새 테이블을 만들 기본

으로 NEWSEQUENTIALID() 함수를 사용할 수 있음을 기억하십시오. 원래 테이블의 키를이 테이블에 삽입하십시오 (다른 컬럼은 그대로 두십시오).

원본 테이블에 다시 가입하고 newsequantialid로 PK를 업데이트하십시오. 캐스케이드 업데이트가있는 경우 FK가 스스로 업데이트해야합니다.

+0

+1 - 나는 비슷한 접근 방식을 과거에 사용했지만 외래 키를 직접 업데이트했습니다. –

0

성능에 나쁜 점을 어떻게 아시나요?

GUID의 장점은 동시에 레코드를 만드는 여러 프로세스에 대해 걱정할 필요가 없다는 것입니다. 프로그램에 따라 코드를 상당히 단순화 할 수 있습니다.

+1

삽입이 느립니다. 페이지 단편화가 높습니다. 순차적 ID로 채워진 중복 데이터베이스가있는 경우 얼마나 느린 지 알려줄 수 있습니다. –

+1

newsequentialid()가 GUID를 생성하지 않는 동안 newid()가 좋지 않아서 페이지 수가 너무 많아서 좋지 않습니다. – SQLMenace

+0

이 podcast의 끝에서 : http://www.dotnetrocks.com/default.aspx?showNum=455 –

0

SequentialGuids는 Guid가 PK 인 경우 성능이 가장 좋습니다. 이것은 그들의 존재 뒤에있는 이유입니다.

+1

실제 질문에 답할 수 없습니다. –