Bagikan melalui


Membandingkan nilai GUID dan uniqueidentifier

Jenis data pengidentifikasi unik global (GUID) di SQL Server diwakili oleh jenis data uniqueidentifier, yang menyimpan nilai biner 16 byte. GUID adalah angka biner, dan penggunaan utamanya adalah sebagai pengidentifikasi yang harus unik dalam jaringan yang memiliki banyak komputer di banyak situs. GUID dapat dihasilkan dengan memanggil fungsi Transact-SQL NEWID, dan dijamin unik di seluruh dunia. Untuk informasi selengkapnya, lihat uniqueidentifier (Transact-SQL).

Mengolah Nilai SqlGuid

Karena nilai GUID panjang dan tidak jelas, nilai tersebut tidak bermakna bagi pengguna. Jika GUID yang dihasilkan secara acak digunakan untuk nilai kunci dan Anda menyisipkan banyak baris, Anda mendapatkan I/O acak ke dalam indeks Anda, yang dapat berdampak negatif pada performa. GUID juga relatif besar jika dibandingkan dengan jenis data lainnya. Secara umum kami merekomendasikan penggunaan GUID hanya untuk skenario yang sangat sempit yang tidak ada jenis data lain yang cocok.

Membandingkan Nilai GUID

Operator perbandingan dapat digunakan dengan nilai uniqueidentifier. Namun, pengurutan tidak diimplementasikan dengan membandingkan pola bit dari dua nilai. Satu-satunya operasi yang diizinkan terhadap nilai uniqueidentifier adalah perbandingan (=, <>, <, >, <=, >=) dan memeriksa NULL (IS NULL dan IS NOT NULL). Tidak ada operator aritmatika lain yang diizinkan.

Baik Guid maupun SqlGuid memiliki metode CompareTo untuk membandingkan nilai GUID yang berbeda. Namun, System.Guid.CompareTo dan SqlTypes.SqlGuid.CompareTo diimplementasikan secara berbeda. SqlGuid mengimplementasikan CompareTo berdasarkan perilaku SQL Server, di mana enam byte terakhir dari suatu nilai adalah yang paling signifikan. Guid mengevaluasi 16 byte secara keseluruhan. Contoh berikut menunjukkan perbedaan perilaku ini. Bagian pertama kode menampilkan nilai Guid yang tidak diurutkan, dan bagian kedua kode memperlihatkan nilai Guid yang diurutkan. Bagian ketiga memperlihatkan nilai SqlGuid yang diurutkan. Output ditampilkan di bawah daftar kode.

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

Contoh ini menghasilkan hasil berikut.

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  

Lihat juga