MS-SQL로 만든 DB에서 UniqueIdentifier 칼럼을 만들어 Index를 설정하거나 이를 Primary key로 사용하면, 말 그대로 GUID 즉, 쉽게 글로벌 유일성(Global Uniqueness)를 보장해 주게 됩니다. DB에서 UniqueIdentifier 즉 UUID 혹은 GUID를 인덱스로 사용하느냐 아니면 int, bigint, number 등의 정수형을 사용하느냐에는 따른 많은 장단점이 있습니다.
GUID 값은 이른바 Pseudo Random 값으로, 16 bytes 크기로 상당히 큰 싸이즈이며, index를 크게 단편화(fragmentation)시킬 수 있다는 단점이 있습니다. 아래 블로그에서 보듯이 Windows 7 RC 다운로드 싸이트가 다운된 원인이 클라이언트에서 제공하는 GUID 값을 SQL DB 인텍스로 사용한데 기인한 것이라고 합니다. 이것은 결국 SQL의 성능을 급격히 저하시켜 웹페이지를 매우 느리게 만들었다는 것 입니다.
http://www.sqlskills.com/BLOGS/PAUL/post/Why-did-the-Windows-7-RC-failure-happen.aspx
SQL 2005에서 추가된 NEWSEQUENTIALID() 는 상당히 fragmentation을 줄여주는 것으로 나타나 있습니다. NEWSEQUENTIALID()는 내부적으로 UuidCreateSequential Windows API를 사용하는데 이는 컴퓨터 MAC 주소를 가지고 있어, 여전히 유일성을 보장해주고 있습니다.
GUID 값은 이른바 Pseudo Random 값으로, 16 bytes 크기로 상당히 큰 싸이즈이며, index를 크게 단편화(fragmentation)시킬 수 있다는 단점이 있습니다. 아래 블로그에서 보듯이 Windows 7 RC 다운로드 싸이트가 다운된 원인이 클라이언트에서 제공하는 GUID 값을 SQL DB 인텍스로 사용한데 기인한 것이라고 합니다. 이것은 결국 SQL의 성능을 급격히 저하시켜 웹페이지를 매우 느리게 만들었다는 것 입니다.
http://www.sqlskills.com/BLOGS/PAUL/post/Why-did-the-Windows-7-RC-failure-happen.aspx
SQL 2005에서 추가된 NEWSEQUENTIALID() 는 상당히 fragmentation을 줄여주는 것으로 나타나 있습니다. NEWSEQUENTIALID()는 내부적으로 UuidCreateSequential Windows API를 사용하는데 이는 컴퓨터 MAC 주소를 가지고 있어, 여전히 유일성을 보장해주고 있습니다.