Quels sont les inconvénients de l'utilisation de GUID? Pourquoi ne pas toujours les utiliser par défaut? P>
8 Réponses :
Les entiers rejoignent beaucoup plus vite, pour un. Ceci est particulièrement important lorsque vous traitez avec des millions de lignes. P>
Pour deux, les GUDS prennent plus de place que les entiers font. Encore une fois, très important lorsqu'il s'agit de millions de lignes. P>
Pour trois, les GUDS prennent parfois des formats différents pouvant causer des hoques dans des applications, etc. Un entier est un entier, à travers et à travers. p>
Un look plus en profondeur plus en profondeur peut être trouvé ici , et sur blog de Jeff . P>
Terminer le jeu, je sais. Il est toujours utile de souligner qu'un GUID est garanti d'être 16 octets ou de son mal. Un entier dans SQL Server est de 4 octets, mais tous les entiers ne sont pas. Cela varie d'un montant équitable par langue et plate-forme.
Les GUID sont quatre fois plus importants que l'intensité d'int, et deux fois plus vastes qu'un Bigint. P> Li>
GUID est vraiment difficile à regarder si vous essayez de résoudre les tables. P> li> ol>
Les GUID sont grands et lents par rapport à l'INT - alors utilisez-les quand ils sont nécessaires, les éteignent quand ils ne sont pas nécessaires, c'est aussi simple que cela! P>
GUIDS peut simplifier les clés génératrices à l'avance ou générer des touches hors connexion ou dans un cluster, sans risque de collision. Il peut également y avoir une légère prestation de sécurité, toutes les clés étant sans surveillance. p>
L'inconvénient est qu'il est plus difficile de lire / de type et de plusieurs de vos tables, vous risquez de réaliser plus tard un besoin de revenir en arrière et de générer des clés respectueuses de l'homme de toute façon. Ils distribueront également uniformément vos enregistrements dans une table, ce qui peut rendre plus lentement à interroger plusieurs enregistrements qui ont été insérés à la même heure à avoir une clé auto-numérique où vos enregistrements sont à l'ordre du temps inséré. P>
Le plus grand succès de performances Vous verrez avec les GUID en tant que clé principale / clustere insertion des enregistrements dans de grandes tables. Il peut s'agir d'une tâche lourde pour reindex car votre clé tombera quelque part au milieu p>
Les GUID sont parfaits du point de vue d'un programmeur - ils sont garantis (presque) uniques, alors pourquoi ne pas les utiliser partout, non? P>
Si vous le regardez à partir du point de vue de la DBA et du point de vue de la base de données, au moins pour SQL Server, il existe quelques points à prendre en compte: P>
Kimberly Tripp - Expert mondialement connu sur l'indexation et la performance de SQL Server - a un grand nombre de blogs sur lesquels un GUID est une source de clustering, une très mauvaise idée - Vérifiez-la blog sur index . p>
Plus particulièrement, ses meilleures pratiques pour une clé de clustering sont les suivantes: P>
Les GUID sont généralement statiques et uniques - mais ils ne sont ni étroits (16 octets contre 4 d'octets pour une INT) ni jamais augmentant. En raison de leur nature, ils sont uniques et (pseudo-) aléatoires. P>
La partie étroite est importante car la clé de clustering sera ajoutée à chaque page d'index pour chaque index non clusterné de votre table - et si vous en avez quelques-uns, et quelques millions de lignes dans votre table. Cela équivaut à un gaspillage massif d'espace - et non seulement sur votre disque, mais également dans votre RAM de SQL Server. P>
La partie toujours croissante est immensable, car le caractère aléatoire des GUDS provoque une grande fragmentation dans vos indices, ce qui affecte négativement votre performance tout autour. Même le Donc, dans l'ensemble, si vous êtes vraiment préoccupé par votre performance SQL Server, Utilisation de GUID comme une clé de clustering est une très mauvaise idée - utilisez l'identité int () à la place, éventuellement à l'aide d'un guid comme le principal (non groupé) clé si vous devez vraiment. p>
marc p> new-actionné () code> de SQL Server 2005 et up ne crée pas vraiment des guideurs séquentiels tout autour - ils sont séquentiels pendant un moment, puis il y a un saut à nouveau, provoquant une fragmentation (moins que totalement aléatoire GUDRS , mais toujours). P>
Je suis d'accord que vous ne devez jamais utiliser un guid comme clé primaire. Toutefois, les GUID sont essentiels et doivent être utilisés lorsque des objets entités (dans le même domaine) sont diffusés sur plusieurs cas.
Utilisation de GUID comme clé primaire permettra de mener à bien votre base de données, car le lecteur devient trop fragmenté. Ceci est une condition connue sous le nom de ralentissement. P>
Cette réponse n'empêche pas l'idée d'utiliser Int's comme clé primaire. Il est principalement destiné à souligner lorsqu'un GUID est utile. P>
expliqué ... Par exemple, prétendons que deux instances de base de données ont une table appelée projet. Si les deux projets partagent le même nom ou le même numéro, il est difficile de distinguer lequel est lequel fait. L'utilisation de GUID est si vous pouvez facilement distinguer entre 2 projets et d'où ils viennent de ... même quand ils ont de nombreuses valeurs similaires entre elles. Cela semble impossible ... mais réellement peut et fait arriver. P>
http://www.codinghorror.com/ Blog / 2007/03 / Primary-Keys-IDS-Versus-Guids.html P>
J'utilise des GUID pour tout type d'entité de DB (commun) qui peut avoir besoin d'être exporté ou partagé avec une autre instance de DB. De cette façon, j'ai un marqueur d'ADN (c'est-à-dire le GUID) qui peut être utilisé pour différencier les objets "comme" de la même entité "physique". P>