2009-05-14 6 views
1

J'utilise actuellement le fournisseur d'appartenances SQL pour ASP.NET qui utilise GUID pour l'ID utilisateur. Mon application a plusieurs tables personnalisées qui renvoient des relations de clé étrangère à la table Utilisateur et je suis préoccupé par l'espace disque et les implications de performance de l'utilisation des GUID du fournisseur standard pour l'ID utilisateur.ASP.NET fournisseur d'appartenances, GUID ID de l'utilisateur et l'espace disque

Quelqu'un at-il rencontrer des problèmes d'espace/performance liés à cela et si oui sont là des approches personnalisées que les gens ont mis en œuvre pour résoudre ce problème?

Toute idée ou suggestions seraient les plus appréciés.

Merci

Répondre

5

Je doute que vous ayez des problèmes d'espace résultant de l'utilisation de GUID plutôt que de types INT par exemple. Une chose dont je vais vous avertir, c'est que vous pourriez être tenté de créer des index clusterisés sur les colonnes GUID de la base de données. NE FAITES PAS CELA. Par défaut, les GUID sont aléatoires et l'insertion de données aléatoires dans une colonne ayant un index clusterisé entraîne quelques problèmes. En cluster, comme vous le savez, signifie EN SÉQUENCE DE STOCKAGE PHYSIQUE. Ainsi, lorsque vous insérez une nouvelle valeur aléatoire (GUID), cette ligne doit généralement être insérée au milieu de la table. Cela peut conduire à des index massivement fragmentés.

Mon conseil serait de créer une table qui relie les valeurs INT GUIDs (BIGINT si vous attendez que de nombreux utilisateurs), puis utiliser l'INT partout ailleurs. Comme Fermin vient de le dire.

1

Pouvez-vous pas un tableau personnalisé qui mappe le GUID à une valeur entière que vous pouvez ensuite utiliser l'entier dans les tableaux personnalisés?

UserId guid 
FriendlyUserId int //use this as FK in other tables? 
1

Si vous utilisez SQL Server 2005, vous pouvez regarder la méthode NewSequentialId(). Eric Swann fournit un good overview de son utilisation avec le fournisseur d'adhésion. Il y a aussi un nice article sur les avantages de l'utilisation des GUID séquentiels par rapport aux aléatoires par défaut. Voici un extrait de comparaison des performances de l'article ...

    [Reads] [Writes] [Leaf Pages] [Avg Page Used] [Avg Fragmentation] [Record Count] 
    IDENTITY(,)  0  1,683  1,667  98.9%   0.7%    50,000 
    NEWID()   0  5,386  2,486  69.3%   99.2%    50,000 
    NEWSEQUENTIALID() 0  1,746  1,725  99.9%   1.0%    50,000 
Questions connexes