Domanda

Ho un database SQL con un set di tabelle con ID univoci. Per molto tempo ho usato il tipo di dati Identificatore univoco e ho passato una guida dalla mia interfaccia C #. Tuttavia, ai fini della velocità durante l'interrogazione, ho deciso di passare a utilizzare un bigint e passare molto tempo.

Qual è il modo più semplice per creare long unici ogni volta che eseguo il codice in modo che non vi sia duplicazione di ID?

È stato utile?

Soluzione

L'unico modo per garantire che il bigint sia univoco all'interno della tabella del database è quello di consentire a SQL Server di generarlo per te - renderlo una colonna IDENTITY.

Hai effettivamente misurato le prestazioni con uniqueidentifier e l'hai trovato troppo lento?

Altri suggerimenti

Se la velocità è un problema, è possibile ottenere miglioramenti delle query se si utilizza un uniqueidentifier generandolo mediante la funzione newsequantialID () anziché newID (). Il nuovo metodo genera identificatori univoci sequenziali

Dove vedi il rallentamento? Query o Inserisci / Aggiorna? Chiedo perché i GUID come chiavi primarie non sono ottimi per l'inserimento / l'aggiornamento perché non sono sequenziali come IDENTITY e possono causare un arresto nell'indice cluster di una chiave. Ma SQL Server ha guide sequenziali che lo risolvono. Ho sentito molto sull'utilizzo dei GUID come chiavi lente ma mi chiedo quanto sia veramente vero. Soprattutto su macchine a 64 bit - il confronto di numeri a 128 bit è davvero molto più lento rispetto al confronto di numeri a 64 o addirittura a 32 bit?

Esistono altre opzioni per generare numeri univoci oltre a un seme. Una possibilità è quella di generare un numero in base al tempo, qualcosa come i segni di spunta o meglio calcolare il numero di secondi dall'inizio del 2009. Quindi aggiungere una cifra univoca in base alla posizione (o all'account se non lo si sta facendo sul server ) il numero è stato creato alla fine del numero (la cifra meno significativa).

Quindi, se il tuo nuovo numero univoco è stato creato sul server delle applicazioni 1 e il suo id fosse 42 e sono passati 4000 secondi dall'inizio del 2009, il tuo nuovo identificatore sarebbe 400042. Il successivo generato potrebbe essere 400942 e uno generato contemporaneamente da un server diverso potrebbe essere 400943.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top