다음을 통해 공유


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 CompareTo 는 SQL Server 동작을 사용하여 구현하며, 값의 마지막 6바이트에서 가장 중요합니다. 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($" {guidValue}");
    }
    Console.WriteLine("");

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

    // Display the sorted Guid values.
    Console.WriteLine("Sorted Guids:");
    foreach (Guid guidSorted in guidList)
    {
        Console.WriteLine($" {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($" {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  

참고하십시오