Chaînes en tant que clés primaires dans la firebase database SQL

Je ne connais pas très bien les bases de données et les théories sur la façon dont elles fonctionnent. Est-il plus lent du sharepoint vue des performances (insertion / mise à jour / interrogation) d’utiliser des chaînes pour les clés primaires que des nombres entiers?

Techniquement oui, mais si une chaîne a le sens d’être la clé primaire, alors vous devriez probablement l’utiliser. Tout dépend de la taille de la table que vous créez et de la longueur de la chaîne qui sera la clé primaire (chaînes plus longues == plus difficiles à comparer). Je ne voudrais pas nécessairement utiliser une chaîne pour une table qui a des millions de lignes, mais la quantité de ralentissement des performances que vous obtiendrez en utilisant une chaîne sur des tables plus petites sera minuscule par rapport aux problèmes que vous pouvez avoir avec un nombre entier ne veulent rien dire par rapport aux données.

Un autre problème lié à l’utilisation de Ssortingngs en tant que clé primaire est que, l’index étant constamment placé dans un ordre séquentiel, lorsqu’une nouvelle clé est créée au milieu de l’ordre, l’index doit être reséquencé … si vous utilisez une auto nombre entier, la nouvelle clé est simplement ajoutée à la fin de l’index.

Insère dans une table ayant un index en cluster où l’insertion se produit au milieu de la séquence NE provoque PAS la réécriture de l’index. Cela ne provoque pas la réécriture des pages contenant les données. S’il y a de la place sur la page où la ligne ira, elle est placée dans cette page. La page unique sera reformatée pour placer la ligne au bon endroit sur la page. Lorsque la page est pleine, un fractionnement de la page se produit, la moitié des lignes de la page passant à une page et l’autre moitié. Les pages sont ensuite reliées dans la liste des pages liées qui comprennent des données de tables ayant l’index cluster. Au maximum, vous finirez par écrire 2 pages de firebase database.

Les cordes sont plus lentes dans les jointures et dans la vraie vie elles sont très rarement vraiment uniques (même si elles sont supposées l’être). Le seul avantage est qu’ils peuvent réduire le nombre de jointures si vous vous connectez à la table primaire uniquement pour obtenir le nom. Cependant, les chaînes sont souvent sujettes à changement, ce qui crée le problème de devoir corriger tous les enregistrements liés lorsque le nom de la société change ou que la personne se marie. Cela peut être une énorme perte de performance et si toutes les tables qui doivent être liées d’une manière ou d’une autre ne sont pas liées (cela se produit plus souvent que vous ne le pensez), vous risquez également d’avoir des différences de données. Un nombre entier qui ne changera jamais pendant la durée de vie de l’enregistrement est un choix beaucoup plus sûr du sharepoint vue de l’intégrité des données et du sharepoint vue des performances. Les clés naturelles ne sont généralement pas très efficaces pour la maintenance des données.

Je tiens également à souligner que le meilleur des deux mondes consiste souvent à utiliser une clé auto-incrémentée (ou, dans certains cas spécialisés, un GUID) comme clé publique, puis à placer un index unique sur la clé naturelle. Vous obtenez des jointures plus rapides, vous n’obtenez pas d’enregistrements en double et vous n’avez pas besoin de mettre à jour un million d’enregistrements enfants car le nom d’une société a changé.

Peu importe ce que vous utilisez en tant que clé primaire, à condition que ce soit UNIQUE. Si vous êtes soucieux de la rapidité ou de la bonne conception de la firebase database, utilisez int à moins que vous ne souhaitiez répliquer les données, puis utilisez un GUID.

S’il s’agit d’une firebase database d’access ou d’une application minuscule, alors qui s’en soucie vraiment? Je pense que la raison pour laquelle la plupart d’entre nous développent le vieux int ou guid, c’est parce que les projets ont une manière de grandir sur nous et que vous voulez vous laisser la possibilité de grandir.

Trop de variables. Cela dépend de la taille de la table, des index, de la nature du domaine de clé de chaîne …

Généralement , les entiers seront plus rapides. Mais la différence sera-t-elle assez grande pour s’en soucier? C’est difficile à dire.

De plus, quelle est votre motivation pour choisir des chaînes? Les touches d’incrémentation automatique numérique sont souvent beaucoup plus faciles . Est-ce la sémantique? Commodité? Problèmes de réplication / déconnectés? Votre réponse ici pourrait limiter vos options. Cela évoque également une troisième option “hybride” que vous oubliez: Guids.

Ne vous souciez pas des performances tant que vous ne disposez pas d’un design simple et sain qui correspond au sujet décrit par les données et correspond bien à l’utilisation prévue des données. Ensuite, si des problèmes de performances apparaissent, vous pouvez les gérer en modifiant le système.

Dans ce cas, il est presque toujours préférable de choisir une chaîne comme clé primaire naturelle, à condition de pouvoir lui faire confiance. Ne vous inquiétez pas si c’est une chaîne, à condition que la chaîne soit raisonnablement courte, disons environ 25 caractères maximum. Vous ne payerez pas un gros prix en termes de performance.

Les personnes qui saisissent les données ou les sources de données automatiques fournissent-elles toujours une valeur pour la clé naturelle supposée ou sont-elles parfois omises? Est-ce que c’est parfois faux dans les données d’entrée? Si oui, comment les erreurs sont-elles détectées et corrigées?

Les programmeurs et les utilisateurs interactifs qui spécifient des requêtes peuvent-ils utiliser la clé naturelle pour obtenir ce qu’ils veulent?

Si vous ne pouvez pas faire confiance à la clé naturelle, inventez un substitut. Si vous inventez un substitut, vous pourriez aussi bien inventer un entier. Ensuite, vous devez vous soucier de la manière de dissimuler le substitut à la communauté des utilisateurs. Certains développeurs qui ne cachent pas la clé de substitution en sont venus à le regretter.

Oui, mais à moins que vous ne vous attendiez à avoir des millions de lignes, n’utilisez pas une clé basée sur des chaînes car cela est généralement plus lent. Après tout, les chaînes sont stockées sous forme de grands nombres, tandis que les clés numériques sont généralement stockées sous forme de nombres plus petits.

Une chose à surveiller, cependant, est de savoir si vous avez des index clusterisés sur n’importe quelle clé et que vous faites un grand nombre d’insertions non séquentielles dans l’index. Chaque ligne écrite provoquera la réécriture de l’index. Si vous faites des insertions par lot, cela peut vraiment ralentir le processus.

Les indices impliquent beaucoup de comparaisons.

En règle générale, les chaînes de caractères sont plus longues que les nombres entiers et les règles de classement peuvent être appliquées à des fins de comparaison. Par conséquent, la comparaison de chaînes est généralement plus complexe que la comparaison de nombres entiers.

Parfois, cependant, il est plus rapide d’utiliser une chaîne comme clé primaire que de créer une jointure supplémentaire avec une ssortingng to numerical id table ssortingng to numerical id .

Deux raisons d’utiliser des entiers pour les colonnes PK:

  1. Nous pouvons définir l’identité du champ entier qui s’incrémente automatiquement.

  2. Lorsque nous créons des PK, la firebase database crée un index (Cluster ou Non Cluster) qui sortinge les données avant leur stockage dans la table. En utilisant une identité sur une PK, l’optimiseur n’a pas besoin de vérifier l’ordre de sorting avant d’enregistrer un enregistrement. Cela améliore les performances sur les grandes tables.

Quelle est la raison pour laquelle vous avez une chaîne en tant que clé primaire?

Je voudrais simplement définir la clé primaire sur un champ entier auto-incrémenté et placer un index sur le champ chaîne.

De cette façon, si vous effectuez des recherches sur la table, elles devraient être relativement rapides, et toutes vos jointures et vos recherches normales ne seront pas affectées par leur vitesse.

Vous pouvez également contrôler la quantité du champ de chaîne qui est indexé. En d’autres termes, vous pouvez dire “indexez seulement les 5 premiers caractères” si vous pensez que cela suffira. Ou si vos données peuvent être relativement similaires, vous pouvez indexer le champ entier.

Du sharepoint vue des performances – Yes ssortingng (PK) ralentira les performances par rapport aux performances obtenues avec un entier (PK), où PK —> Clé primaire.

Du sharepoint vue de l’exigence – Bien que cela ne fasse pas encore partie de votre question, j’aimerais néanmoins le mentionner. Lorsque nous traitons des données volumineuses sur différentes tables, nous recherchons généralement l’ensemble de clés probable pouvant être défini pour une table particulière. C’est principalement parce qu’il ya beaucoup de tables et que la plupart des tables sont liées à l’autre par une relation (un concept de clé étrangère). Par conséquent, nous ne pouvons pas toujours choisir un entier comme clé primaire, mais plutôt une combinaison de 3, 4 ou 5 atsortingbuts comme clé primaire pour ces tables. Et ces clés peuvent être utilisées comme clé étrangère lorsque nous relions les enregistrements avec une autre table. Cela rend utile de relier les enregistrements entre différentes tables si nécessaire.

Par conséquent, pour une utilisation optimale – Nous faisons toujours une combinaison de 1 ou 2 entiers avec 1 ou 2 atsortingbuts de chaîne, mais encore une fois si cela est requirejs.

Il pourrait y avoir un très grand malentendu lié à la chaîne dans la firebase database. Presque tout le monde a pensé que la représentation des nombres par la firebase database était plus compacte que pour les chaînes. Ils pensent que dans les nombres DB-S sont représentés comme dans la mémoire. Mais ce n’est pas vrai. Dans la plupart des cas, la représentation des nombres est plus proche d’une chaîne de caractères comme une représentation que d’une autre.

La vitesse d’utilisation du nombre ou de la chaîne dépend davantage de l’indexation que du type lui-même.

Par défaut, ASPNetUserIds contient 128 chaînes de caractères et les performances sont correctes.

Si la clé doit être unique dans la table, elle devrait être la clé. Voici pourquoi;

clé de chaîne primaire = Corriger les relations de firebase database, 1 clé de chaîne (la principale) et 1 chaîne d’index (la principale).

L’autre option est une clé int typique, mais si la chaîne doit être unique, vous devrez probablement append un index en raison de requêtes non-stop pour valider ou vérifier son caractère unique.

Donc, en utilisant une clé d’identité int = Relations de firebase database incorrectes, 1 clé int (Primaire), 1 index int (Primaire), Probablement une chaîne unique Index, et manuellement devoir valider la même chaîne n’existe pas (quelque chose comme une vérification SQL ).

Pour obtenir de meilleures performances en utilisant un int sur une chaîne pour la clé primaire, lorsque la chaîne doit être unique, la situation doit être très étrange. J’ai toujours préféré utiliser des clés de chaîne. Et en règle générale, ne dénormalisez pas une firebase database jusqu’à ce que vous en ayez besoin .