2008-08-20 9 views
8

Nous stockons des guides dans une base de données MS SQL. Il y a du code hérité qui fait Guid.ToString() et les transmet ensuite à un varchar(64) et un code plus récent les transmet en utilisant un paramètre identifiant unique. Lorsque vous regardez les résultats à l'aide du studio MS SQL Management, ils sont différents. L'ordre des octets des trois premiers blocs est inversé mais le dernier reste le même. Pourquoi?Pourquoi Guid.ToString() inverse l'ordre des octets?

Répondre

8

Les champs identifiants uniques du serveur SQL peuvent être indexés, et sont donc 'en arrière'.

Des informations peuvent être générées à la fois à partir d'informations spécifiques à la machine et d'informations sur les événements.

La valeur par défaut Guid en .Net est aléatoire, mais vous pouvez obtenir Guids séquentielle de avec un appel extern:

[DllImport("rpcrt4.dll", SetLastError = true)] 
static extern int UuidCreateSequential(out Guid guid); 

Vous obtiendrez Guids en fonction de votre adresse MAC (MSDN docs) qui sont séquentielle.

Si vous .ToString() ces guids séquentiels alors vous verrez la première partie de la chaîne varie, tandis que le reste reste constant.

Cela rend les contrôles d'égalité entre les contrôles plus rapides (car les différences seront au début) et améliore la variation pour ceux tronqués. Pour rechercher des colonnes, SqlServer construit des index de la même manière qu'un annuaire téléphonique ou un dictionnaire. Il est beaucoup plus rapide de rechercher des mots commençant par "Sur *" que de trouver ceux qui se terminent par "* flux". Cela signifie que, pour le serveur Sql, tout Guids séquentiel doit d'abord être stocké avec la valeur répétée, de sorte qu'il les stocke à l'avant.