uniqueidentifier 데이터 사용

uniqueidentifier 데이터 형식은 GUID(전역 고유 식별자) 역할을 하는 16바이트 이진 값을 저장합니다. GUID는 고유한 이진 숫자입니다. 전 세계 모든 컴퓨터는 고유한 GUID 값을 생성합니다. GUID의 주된 용도는 여러 사이트에 많은 컴퓨터가 있는 네트워크에서 고유한 식별자를 지정하는 것입니다.

uniqueidentifier 열의 GUID 값은 일반적으로 다음 방법 중 하나로 얻습니다.

  • Transact-SQL 문, 일괄 처리 또는 스크립트에서 NEWID 함수를 호출하여

  • 응용 프로그램 코드에서 GUID를 반환하는 응용 프로그램 API 함수 또는 메서드를 호출하여

Transact-SQL NEWID 함수 및 응용 프로그램 API 함수와 메서드는 네트워크 카드의 ID와 CPU 클럭의 고유 번호에서 새 uniqueidentifier 값을 생성합니다. 각 네트워크 카드에는 고유한 ID 번호가 있습니다. NEWID로 반환된 uniqueidentifier 값은 서버의 네트워크 카드를 사용하여 생성됩니다. 응용 프로그램 API 함수 및 메서드로 반환된 uniqueidentifier 값은 클라이언트의 네트워크 카드를 사용하여 생성됩니다.

uniqueidentifier 값은 일반적으로 상수로 정의되지 않습니다. 다음과 같은 방법으로 uniqueidentifier 상수를 지정할 수 있습니다.

  • 문자열 형식: '6F9619FF-8B86-D011-B42D-00C04FC964FF'

  • 이진 형식: 0xff19966f868b11d0b42d00c04fc964ff

uniqueidentifier 데이터 형식은 IDENTITY 속성과 같은 방법으로 삽입된 행에 새 ID를 자동으로 생성하지 않습니다. 예를 들어 새 uniqueidentifier 값을 얻으려면 테이블에 NEWID 또는 NEWSEQUENTIALID 함수를 지정하는 DEFAULT 절이 있거나 INSERT 문에서 NEWID 함수를 사용해야 합니다.

CREATE TABLE MyUniqueTable
   (UniqueColumn   UNIQUEIDENTIFIER      DEFAULT NEWID(),
   Characters      VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO

[!참고]

NEWSEQUENTIALID를 사용하여 GUID를 생성하면 인덱스의 리프 수준에서 페이지 경합을 줄일 수 있습니다. uniqueidentifier 형식의 테이블 열에서는 DEFAULT 제약 조건에만 NEWSEQUENTIALID를 사용할 수 있습니다.

uniqueidentifier 열에 UNIQUE 또는 PRIMARY KEY 제약 조건이 지정되지 않으면 이 열에 개별 uniqueidentifier 값이 여러 번 나올 수 있습니다. 여러 행이 원본 테이블에 있는 동일한 기본 키를 참조하는 경우 다른 테이블에 있는 uniqueidentifier 기본 키를 참조하는 외래 키 열에 개별 uniqueidentifier 값이 여러 번 나옵니다.

테이블에는 여러 uniqueidentifier 열이 있을 수 있습니다. ROWGUIDCOL 속성으로 각 테이블에 uniqueidentifier 열을 하나씩 지정할 수 있습니다. ROWGUIDCOL 속성은 열에 있는 uniqueidentifier 값이 테이블에 있는 행을 고유하게 식별함을 나타냅니다. 그러나 속성은 이를 위해 아무 것도 하지 않아도 됩니다. 고유성은 열에 PRIMARY KEY 제약 조건을 지정하는 등의 다른 메커니즘을 사용하여 이루어집니다. ROWGUIDCOL 속성은 주로 MicrosoftSQL Server 복제에서 사용됩니다. 구독 업데이트가 있는 병합 복제 및 트랜잭션 복제의 경우 uniqueidentifier 열을 사용하여 여러 테이블 복사본 간에 행이 고유하게 식별되도록 합니다.

uniqueidentifier 데이터 형식에는 여러 가지 단점이 있습니다.

  • 값이 길고 명확하지 않습니다. 따라서 사용자가 제대로 입력하거나 기억하기 어렵습니다.

  • 임의 값이므로 사용자가 알기 쉬운 패턴을 사용할 수 없습니다.

  • uniqueidentifier 값이 생성된 시퀀스를 확인할 수 있는 방법이 없으므로 순차적으로 증가되는 키 값에 의존하는 기존 응용 프로그램에는 적합하지 않습니다.

  • 16바이트에서 uniqueidentifier 데이터 형식은 4바이트 정수 등의 다른 데이터 형식보다 상대적으로 더 큽니다. 이는 uniqueidentifier 키를 사용하여 작성한 인덱스가 int 키를 사용한 인덱스보다 상대적으로 느릴 수 있다는 것을 의미합니다.

전역 고유성이 필요 없을 때 또는 순차적으로 키를 증가시켜야 할 때는 IDENTITY 속성 사용을 고려해 보십시오.