Je ne suis pas très familier avec les bases de données et les théories derrière leur fonctionnement. Est-ce que ce soit plus lent dans une perspective de rendement (insertion/mise à jour/interrogation) à utiliser des cordes pour les clés primaires que les entiers ?
Réponses
Trop de publicités?Techniquement oui, mais si une chaîne de sens que pour être la clé primaire, alors vous devriez probablement utiliser. Tout cela dépend de la taille de la table que vous faites, et de la taille de la chaîne qui va être la clé primaire (plus de chaînes == difficile de comparer). Je ne voudrais pas nécessaire d'utiliser une chaîne de caractères pour une table qui a des millions de lignes, mais le montant de ralentissement des performances que vous obtiendrez en utilisant une chaîne sur les petites tables seront minimes pour les maux de tête que vous pouvez avoir en ayant un entier qui ne veut rien dire en ce qui concerne les données.
Un autre problème avec l’utilisation de chaînes comme une clé primaire est que parce que l’index est constamment mis en ordre séquentiel, lorsqu’une nouvelle clé est créée qui serait dans le milieu de l’ordre de que l’index doit être reséquencées... Si vous utilisez un nombre entier d’auto , la nouvelle clé se contente d’ajouter à la fin de l’index.
Insertions dans une table ayant un index cluster où l'insertion se produit dans le milieu de la séquence N'est PAS la cause de l'index d'être réécrit. Il ne provoque pas les pages contenant les données à être réécrit. Si il ya de la place sur la page de la ligne, puis il est placé dans la page. La seule page sera reformaté pour placer la ligne au bon endroit dans la page. Lorsque la page est pleine, un fractionnement de la page qui va se passer, avec la moitié des lignes sur la page d'une page, et une moitié sur l'autre. Les pages sont ensuite réédités dans la liste liée de pages qui constituent une des tables de données de l'index cluster. Tout au plus, vous finirez par écrit de 2 pages de base de données.
Les chaînes sont plus lents dans les jointures et dans la vraie vie, ils sont très rarement vraiment unique (même quand ils sont censés être). Le seul avantage est qu'ils peuvent réduire le nombre de jointures si vous vous joignez à la primaire de la table seulement pour obtenir le nom. Cependant, les chaînes sont également souvent l'objet de changements créant ainsi le problème de la correction de tous les enregistrements associés lorsque l'entreprise, les changements de nom ou de la personne qui va se marier. Cela peut être un énorme gain de performance et si toutes les tables qui doivent être liés en quelque sorte ne sont pas liés (ce qui arrive plus souvent que vous ne le pensez), alors vous pourriez avoir des différences de données. Un entier qui ne changera jamais dans la vie de l'enregistrement est un beaucoup plus sûr choix à partir d'un point de vue de l'intégrité des données ainsi que d'un point de vue des performances. Les clefs naturelles sont généralement pas très bon pour la maintenance des données.
Trop de variables. Il dépend de la taille de la table, l'index, de la nature de la chaîne de clé de domaine...
Généralement, les entiers seront plus rapides. Mais la différence sera assez grand pour les soins? C'est difficile à dire.
Aussi, quelle est votre motivation pour le choix des chaînes? Numérique auto-incrémentation des clés sont souvent tellement plus facile ainsi. Est-il de la sémantique? Commodité? La réplication/déconnecté des préoccupations? La réponse à votre question pourrait limiter vos options. Cela apporte aussi à l'esprit d'un tiers "hybride" option que vous êtes l'oubli: Guid.