Condividi tramite


Confronto tra GUID e valori uniqueidentifier

Scarica ADO.NET

Il tipo di dati identificatore univoco globale (GUID, Globally Unique IDentifier) in SQL Server è rappresentato dal tipo di dati uniqueidentifier, in cui è archiviato un valore binario di 16 byte. Un GUID è un numero binario usato principalmente come identificatore univoco in una rete con molti computer in più siti. I GUID possono essere generati chiamando la funzione NEWID di Transact-SQL. Si assicura l'univocità in tutto il mondo. Per altre informazioni, vedere uniqueidentifier (Transact-SQL).

Uso di valori SqlGuid

I GUID sono valori lunghi e poco chiari, pertanto molti utenti non ne comprendono il significato. Se si usano GUID generati in modo casuale per valori chiave e se si inserisce un numero elevato di righe, l'I/O negli indici sarà casuale, determinando un impatto negativo sulle prestazioni. Rispetto ad altri tipo di dati, i GUID sono anche valori relativamente grandi. È in genere consigliabile usare i GUID solo per pochi scenari, nei quali non sono adatti altri tipi di dati.

Confronto di valori GUID

Con valori uniqueidentifier è possibile usare gli operatori di confronto. Quando si confrontano gli schemi di bit dei due valori, tuttavia, l'ordinamento non viene implementato. Le uniche operazioni consentite su un valore uniqueidentifier sono i confronti (=, <>, <, >, <=, >=) e il controllo di valori NULL (IS NULL e IS NOT NULL). Non sono ammessi altri operatori aritmetici.

Sia Guid che SqlGuid usano un metodo CompareTo per confrontare valori GUID diversi. System.Guid.CompareTo e SqlTypes.SqlGuid.CompareTo sono tuttavia implementati in modo diverso. SqlGuid implementa CompareTo usando il comportamento di SQL Server, in cui gli ultimi 6 byte di un valore sono i più significativi. Guid valuta tutti i 16 byte. L'esempio seguente illustra queste differenze di comportamento. La prima sezione del codice visualizza valori Guid non ordinati, mentre la seconda sezione visualizza i valori Guid ordinati. La terza sezione visualizza i valori SqlGuid ordinati. L'output viene visualizzato sotto l'elenco codici.

using System.Data.SqlTypes;
using System.Collections;

class Program
{
    static void Main()
    {
        WorkWithGuids();
        Console.ReadLine();
    }
    private static void WorkWithGuids()
    {
        // Create an ArrayList and fill it with Guid values.
        ArrayList guidList = 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:");
        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 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:");
        foreach (SqlGuid sqlGuidValue in sqlGuidList)
        {
            Console.WriteLine(" {0}", sqlGuidValue);
        }
    }
}

L'esempio produce i risultati seguenti.

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  

Passaggi successivi