GUID ve uniqueidentifier Değerlerini Karşılaştırma

SQL Server'daki genel benzersiz tanımlayıcı (GUID) veri türü, 16 baytlık ikili değeri depolayan veri türüyle uniqueidentifier temsil edilir. GUID bir ikili sayıdır ve ana kullanımı, birçok konumda çok sayıda bilgisayarı olan bir ağda benzersiz olması gereken bir tanımlayıcıdır. GUID'ler Transact-SQL NEWID işlevi çağrılarak oluşturulabilir ve tüm dünyada benzersiz olması garanti edilir. Daha fazla bilgi için bkz . uniqueidentifier (Transact-SQL).

SqlGuid Değerleriyle Çalışma

GUID değerleri uzun ve belirsiz olduğundan, kullanıcılar için anlamlı değildir. Anahtar değerleri için rastgele oluşturulan GUID'ler kullanılırsa ve çok fazla satır eklerseniz, dizinlerinize rastgele G/Ç girersiniz ve bu da performansı olumsuz etkileyebilir. GUID'ler, diğer veri türleriyle karşılaştırıldığında da nispeten büyüktür. Genel olarak GUID'lerin yalnızca başka hiçbir veri türünün uygun olmadığı çok dar senaryolar için kullanılmasını öneririz.

GUID Değerlerini Karşılaştırma

Karşılaştırma işleçleri değerlerle uniqueidentifier kullanılabilir. Ancak sıralama, iki değerin bit desenleri karşılaştırılarak uygulanmaz. Bir uniqueidentifier değere karşı izin verilen tek işlemler karşılaştırmalar (=, <>, <, , >= <, >=) ve NULL (IS NULL ve IS NOT NULL) denetimidir. Başka aritmetik işleçlere izin verilmez.

SqlGuid Hem hem de Guid farklı GUID değerlerini karşılaştırmak için bir CompareTo yöntemi vardır. Ancak ve System.Guid.CompareToSqlTypes.SqlGuid.CompareTo farklı şekilde uygulanır. SqlGuidCompareTo bir değerin son altı baytında en önemli olan SQL Server davranışını kullanarak uygular. Guid 16 baytı da değerlendirir. Aşağıdaki örnekte bu davranış farkı gösterilmektedir. Kodun ilk bölümünde sıralanmamış Guid değerler, ikinci bölümü ise sıralanmış Guid değerleri gösterir. Üçüncü bölümde sıralanmış SqlGuid değerler gösterilir. Çıkış, kod listesinin altında görüntülenir.

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

Bu örnek aşağıdaki sonuçları üretir.

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  

Ayrıca bkz.