Est-ce une bonne idée d'utiliser rowguid comme clé unique dans la conception de la base de données?
SQL Server fournit le type de [rowguid]. J'aime l'utiliser comme clé primaire unique, pour identifier une ligne de mise à jour. Le bénéfice s'affiche si vous avez un dump de la table et de le recharger, pas de gâchis avec SerialNo (identité) colonnes.
Dans le cas particulier des bases de données distribuées comme des copies hors ligne sur des ordinateurs portables ou quelque chose comme ça, rien d'autre ne fonctionne.
Qu'en pensez-vous? Trop de frais généraux?
source d'informationauteur Ice
Vous devez vous connecter pour publier un commentaire.
Comme un clé primaire dans le sens logique (qui identifie de manière unique votre lignes) - oui, absolument, est tout à fait pertinent.
MAIS: dans SQL Server, la clé primaire est par défaut le clé de cluster sur votre table, et à l'aide d'un
ROWGUID
comme la clé de cluster est vraiment une très mauvaise idée. Voir Kimberly Tripp excellent Guid comme une première et/ou la clé de cluster l'article en profondeur raisons de ne pas utiliser le Guid pour le clustering.Depuis le GUID est par définition aléatoire, vous aurez un horrible indice de fragmentation et donc vraiment vraiment mauvaise performance sur insérer, mettre à jour, supprimer et sélectionner les états.
Aussi, puisque la clé de cluster est ajoutée à chaque champ de chaque et tous les index non cluster sur votre table, vous perdez beaucoup d'espace - à la fois sur le disque ainsi que le serveur de RAM lors de l'utilisation de GUID de 16 octets vs 4 octets INT.
Donc: oui, comme une clé primaire, une ROWGUID a ses mérites, mais si vous ne l'utilisez, certainement éviter d'utiliser cette colonne que votre clé de cluster dans le tableau! Utiliser un INT IDENTITY() ou quelque chose de similaire.
Pour une clé de cluster, idéalement, vous devriez regarder pour les quatre caractéristiques:
INT IDENTITY() convient idéalement à ce besoin. Et oui - la clé de cluster doit être unique, car il est utilisé pour localiser physiquement une ligne dans la table, si vous choisissez une colonne qui ne peut pas être garantie unique, SQL Server va ajouter un à quatre octets indicateur d'unicité à votre clé de cluster - encore une fois, pas quelque chose que vous voulez avoir....
Découvrez L'Index Cluster Continue De Faire Débat - un autre merveilleux et instructif article de Kim Tripp (la "Reine de SQL Serveur d'Indexation"), dans laquelle elle explique toutes ces exigences très joliment et soigneusement.
MArc
Le problème avec rowguid est que si vous l'utilisez pour votre index cluster, vous vous retrouvez constamment re-calcul de votre table de pages pour la tenue des inserts. Un séquentielle guid ( NEWSEQUENTIALID() ) fonctionne souvent mieux.
Notre application hors connexion est utilisé dans les succursales et nous avons une base de données centrale dans notre bureau principal. Pour synchroniser la base de données dans la base de données centrale, nous avons utilisé rowguid de colonnes de toutes les tables. Peut-être il y a de meilleures solutions, mais il est plus facile pour nous. Nous n'avons pas fait face à aucun problème majeur jusqu'à ce jour au cours des 3 dernières années.
Contraire à la accepté de répondre, le type de données uniqueidentifier dans SQL Server est en fait un bon candidat pour une clé de cluster; aussi longtemps que vous le garder séquentielle.
Ceci est facilement réalisé à l'aide de (newsequentialid()) comme valeur par défaut pour la colonne.
Si vous les lisez,Kimberly Tripp de l'articlevous trouverez que séquentiellement généré Guid sont en fait un bon candidat pour la primaire clés de clusters en termes de fragmentation et le seul inconvénient est de taille.
Si vous avez de grandes lignes, avec quelques indices, le supplément de quelques octets dans un GUID peuvent être négligeable. Assurez-vous la question composés si vous avez des courtes lignes avec de nombreux indices, mais c'est quelque chose que vous avez à peser jusqu'en fonction de votre propre situation.
À l'aide séquentielle uniqueidentifiers fait beaucoup de sens lorsque vous utilisez la réplication de fusion, surtout lorsqu'il s'agit de l'identité de semis et les malheurs qui en découlent.
Serveur calss de stockage n'est pas pas cher, mais je préfère avoir une base de données qui utilise un peu plus d'espace que celui qui s'arrête lorsque votre attribué automatiquement les plages d'identité se chevauchent.