Question

J'ai une base de données SQL avec un ensemble de tables ayant des identifiants uniques. Depuis très longtemps, j'utilise le type de données Identifier unique et passe un GUID de mon interface C #. Cependant, dans un souci de rapidité lors de l’interrogation, j’ai décidé d’utiliser un bigint et de passer un long.

Quel est le moyen le plus simple de créer des longs uniques à chaque fois que je lance le code de sorte qu'il n'y ait pas de duplication d'ID?

Était-ce utile?

La solution

La seule façon de garantir que le bigint est unique dans la table de base de données est de laisser SQL Server le générer pour vous - en faire une colonne IDENTITY.

Avez-vous réellement mesuré les performances avec uniqueidentifier et l’avez trouvé trop lent?

Autres conseils

Si la vitesse pose problème, vous pouvez améliorer les requêtes si vous utilisez un identifiant unique en le générant à l'aide de la fonction newsequantialID () plutôt que newID (). La nouvelle méthode génère des identifiants uniques séquentiels

Où voyez-vous le ralentissement? Requête ou insertion / mise à jour? Je demande parce que les GUID en tant que clés primaires ne sont pas intéressants pour l'insertion / la mise à jour, car ils ne sont pas séquentiels comme ceux d'IDENTITY et peuvent provoquer des contournements dans l'index en cluster d'une clé. Mais SQLServer a maintenant des instructions séquentielles qui résolvent cela. J'entends beaucoup parler de l'utilisation lente des GUID en tant que clés, mais je me demande à quel point cela est vraiment vrai. Surtout sur les machines 64 bits - comparer des nombres de 128 bits est-il vraiment beaucoup plus lent que de comparer des nombres de 64 ou même 32 bits?

Il existe d'autres options pour générer des numéros uniques en plus d'une graine. Une possibilité est de générer un nombre basé sur le temps, quelque chose comme les ticks, ou de mieux calculer le nombre de secondes depuis le début de 2009. Ajoutez ensuite un chiffre unique basé sur l'emplacement (ou sur le compte si vous ne le faites pas sur le serveur). ) le numéro a été créé à la fin du numéro (le chiffre le moins significatif).

Ainsi, si votre nouveau numéro unique a été créé sur le serveur d'applications 1 et que son identifiant est 42 et qu'il s'est écoulé 4 000 secondes depuis le début de 2009, votre nouvel identifiant sera 400042. Le prochain identifiant généré pourrait être 400942, et celui généré à partir d'un serveur différent exactement au même moment pourrait être 400943.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top