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)입니다. 다른 산술 연산자는 허용되지 않습니다.
Guid와 SqlGuid 모두 다른 GUID 값을 비교하는 CompareTo
메서드를 가지고 있습니다. 그러나 System.Guid.CompareTo
SqlTypes.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