Megosztás:


GUID és uniqueidentifier értékek összehasonlítása

Az SQL Server globálisan egyedi azonosító (GUID) adattípusát a uniqueidentifier adattípus jelöli, amely egy 16 bájtos bináris értéket tárol. A GUID egy bináris szám, amelynek fő használata azonosító, amelynek egyedinek kell lennie egy olyan hálózatban, amely számos helyen sok számítógéppel rendelkezik. A GUID-k a Transact-SQL NEWID függvény meghívásával hozhatók létre, és garantáltan egyediek az egész világon. További információ: egyedi azonosító (Transact-SQL).

Az SqlGuid-értékek használata

Mivel a GRAFIKUS GUID-értékek hosszúak és homályosak, nem értelmezhetők a felhasználók számára. Ha a rendszer véletlenszerűen létrehozott GRAFIKUS GUID-ket használ a kulcsértékekhez, és sok sort szúr be, véletlenszerű I/O-t kap az indexekbe, ami negatív hatással lehet a teljesítményre. A GUID-ok is viszonylag nagyok más adattípusokhoz képest. Általánosságban elmondható, hogy a GRAFIKUS GUID-k használatát csak nagyon szűk helyzetekben javasoljuk, amelyekhez más adattípus nem megfelelő.

GUID-értékek összehasonlítása

Az összehasonlító operátorok uniqueidentifier értékekkel használhatók. A rendezés azonban nem valósul meg a két érték bitmintáinak összehasonlításával. Az uniqueidentifier értéken csak az összehasonlítás (=, <>, <, >, <=, >=) és a NULL (IS NULL és NOT NULL) érték ellenőrzése engedélyezett. Más aritmetikai operátorok nem engedélyezettek.

A Guid és a SqlGuid is rendelkezik CompareTo metódussal a különböző GUID-értékek összehasonlítására. A System.Guid.CompareTo és a SqlTypes.SqlGuid.CompareTo azonban másképpen implementálják. SqlGuid az SQL Server viselkedését használva implementálja CompareTo-et, ahol az érték utolsó hat bájtja a legjelentősebb. Guid kiértékeli mind a 16 bájtot. Az alábbi példa ezt a viselkedésbeli különbséget mutatja be. A kód első szakasza a rendezetlen Guid értékeket jeleníti meg, a kód második szakasza pedig a rendezett Guid értékeket. A harmadik szakasz a rendezett SqlGuid értékeket jeleníti meg. A kimenet a kódlista alatt jelenik meg.

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

Ez a példa a következő eredményeket hozza létre.

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  

Lásd még