Mysql
 sql >> Base de données >  >> RDS >> Mysql

pénalité de performance des chaînes en tant que clés primaires ?

La base de données doit maintenir un arbre B (ou une structure similaire) avec la clé de manière à les commander.

Si la clé est hachée et stockée dans le B-Tree, ce serait bien de vérifier rapidement l'unicité de la clé - la clé peut toujours être recherchée efficacement. Mais vous ne seriez pas en mesure de rechercher efficacement plage de données (par exemple avec LIKE ) car le B-Tree n'est plus ordonné en fonction de la valeur String.

Donc, je pense que la plupart des bases de données stockent vraiment la chaîne dans le B-Tree, ce qui peut (1) prendre plus d'espace que les valeurs numériques et (2) nécessitent que le B-Tree soit rééquilibré si les clés sont insérées dans un ordre arbitraire (pas de notion de valeur croissante comme avec pk numérique).

La pénalité en pratique peut aller d'insignifiant à énorme. Tout dépend de l'utilisation, du nombre de lignes, de la taille moyenne de la clé de chaîne, des requêtes qui rejoignent la table, etc.