GUID 및 uniqueidentifier 값 비교

SQL Server의 GUID(Globally Unique Identifier) 데이터 형식은 16바이트 이진 값을 저장하는 uniqueidentifier 데이터 형식으로 표현됩니다. GUID는 이진 숫자이고, 기본 용도는 많은 사이트에 많은 컴퓨터가 있는 네트워크에서 고유해야 하는 식별자입니다. GUID는 Transact-SQL NEWID 함수를 호출하여 생성할 수 있으며 전역적으로 고유합니다. 자세한 내용은 uniqueidentifier(Transact-SQL)를 참조하세요.

SqlGuid 값 사용

GUID 값은 길고 모호하기 때문에 사용자가 의미를 이해하기가 어렵습니다. 임의로 생성된 GUID를 키 값에 사용하고 많은 행을 삽입하면 인덱스에 임의의 I/O가 발생하여 성능에 좋지 않은 영향을 줄 수 있습니다. GUID는 또한 다른 데이터 형식에 비해 비교적 큰 편입니다. 일반적으로 다른 데이터 형식이 적합하지 않은 매우 제한적인 시나리오에만 GUID를 사용하는 것이 좋습니다.

GUID 값 비교

uniqueidentifier 값에는 비교 연산자를 사용할 수 있습니다. 그러나 두 값의 비트 패턴을 비교하면 정렬이 구현되지 않습니다. uniqueidentifier 값에 대해 허용되는 작업은 비교(=, <><, >, <=, >=) 및 NULL 검사(IS NULL 및 IS NOT NULL)뿐입니다. 다른 산술 연산자는 허용되지 않습니다.

GuidSqlGuid에는 서로 다른 GUID 값을 비교하기 위한 CompareTo 메서드가 있습니다. 그러나 System.Guid.CompareToSqlTypes.SqlGuid.CompareTo는 구현 방식이 서로 다릅니다. SqlGuid는 값의 마지막 6바이트가 가장 중요한 SQL Server 동작을 사용하여 CompareTo를 구현합니다. Guid는 16바이트를 모두 평가합니다. 다음 예제에서는 이러한 동작의 차이를 보여 줍니다. 코드의 첫 번째 섹션은 정렬되지 않은 Guid 값을 표시하고 코드의 두 번째 섹션은 정렬된 Guid 값을 표시합니다. 세 번째 부분에서는 정렬된 SqlGuid 값을 보여 줍니다. 출력은 코드 목록 아래에 표시되어 있습니다.

static void WorkWithGuids()
{
    // Create an ArrayList and fill it with Guid values.
    ArrayList guidList = new()
    {
        new Guid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"),
        new Guid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"),
        new Guid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE")
    };

    // Display the unsorted Guid values.
    Console.WriteLine("Unsorted Guids:");
    foreach (Guid guidValue in guidList)
    {
        Console.WriteLine(" {0}", guidValue);
    }
    Console.WriteLine("");

    // Sort the Guids.
    guidList.Sort();

    // Display the sorted Guid values.
    Console.WriteLine("Sorted Guids:");
    foreach (Guid guidSorted in guidList)
    {
        Console.WriteLine(" {0}", guidSorted);
    }
    Console.WriteLine("");

    // Create an ArrayList of SqlGuids.
    ArrayList sqlGuidList = new()
    {
        new SqlGuid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"),
        new SqlGuid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"),
        new SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE")
    };

    // Sort the SqlGuids. The unsorted SqlGuids are in the same order
    // as the unsorted Guid values.
    sqlGuidList.Sort();

    // Display the sorted SqlGuids. The sorted SqlGuid values are ordered
    // differently than the Guid values.
    Console.WriteLine("Sorted SqlGuids:");
    foreach (SqlGuid sqlGuidValue in sqlGuidList)
    {
        Console.WriteLine(" {0}", sqlGuidValue);
    }
}
Private Sub WorkWithGuids()

    ' Create an ArrayList and fill it with Guid values.
    Dim guidList As New ArrayList()
    guidList.Add(New Guid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"))
    guidList.Add(New Guid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"))
    guidList.Add(New Guid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE"))

    ' Display the unsorted Guid values.
    Console.WriteLine("Unsorted Guids:")
    For Each guidValue As Guid In guidList
        Console.WriteLine("{0}", guidValue)
    Next
    Console.WriteLine()

    ' Sort the Guids.
    guidList.Sort()

    ' Display the sorted Guid values.

    Console.WriteLine("Sorted Guids:")
    For Each guidSorted As Guid In guidList
        Console.WriteLine("{0}", guidSorted)
    Next
    Console.WriteLine()

    ' Create an ArrayList of SqlGuids.
    Dim sqlGuidList As New ArrayList()
    sqlGuidList.Add(New SqlGuid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"))
    sqlGuidList.Add(New SqlGuid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"))
    sqlGuidList.Add(New SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE"))

    ' Sort the SqlGuids. The unsorted SqlGuids are in the same order
    ' as the unsorted Guid values.
    sqlGuidList.Sort()

    ' Display the sorted SqlGuids. The sorted SqlGuid values are 
    ' ordered differently than the Guid values.
    Console.WriteLine("Sorted SqlGuids:")
    For Each sqlGuidValue As SqlGuid In sqlGuidList
        Console.WriteLine("{0}", sqlGuidValue)
    Next
End Sub

이 예에서 생성되는 결과는 다음과 같습니다.

Unsorted Guids:  
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee  
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee  
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee  
  
Sorted Guids:  
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee  
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee  
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee  
  
Sorted SqlGuids:  
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee  
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee  
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee  

참고 항목