MySQL - avec de la Ficelle pour que la Clé Primaire
J'ai vu un poste similaire sur un Débordement de Pile déjà, mais n'était pas tout à fait satisfait.
Disons que j'offre un service Web. http://foo.com/SERVICEID
SERVICEID est une Chaîne unique ID utilisé pour référencer le service (de base 64, basse/majuscules + chiffres), similaire à la façon dont le raccourcisseur d'URL de services de générer de code pour une URL.
Je comprends qu'il y sont inhérents à des problèmes de performances avec de la comparaison de chaînes rapport entiers.
Mais je suis curieux de savoir comment optimiser au maximum une clé primaire de type Chaîne de caractères.
Je suis de l'utilisation de MySQL, (actuellement à l'aide de moteur MyISAM, mais j'ai, certes, ne comprends pas tout le moteur de différences).
Grâce.
mise à jour pour mon objectif la chaîne était en fait juste un base62 codé entier, de sorte que la clé primaire est un entier, et puisque vous êtes susceptible de ne jamais dépasser bigint de la taille, il ne fait pas trop de sens d'utiliser autre chose (pour mon cas d'utilisation particulier)
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien de mal avec l'aide d'un CHAR ou VARCHAR comme clé primaire.
Sûr que ça va prendre un peu plus de place qu'un INT dans de nombreux cas, mais il existe de nombreux cas où il est le choix le plus logique et peut même réduire le nombre de colonnes dont vous avez besoin, l'amélioration de l'efficacité, en évitant le besoin d'avoir un champ ID.
Par exemple, les codes de pays ou de l'état des abréviations déjà avoir standardisé les codes de caractères et ce serait une bonne raison pour utiliser un caractère en fonction de la clé primaire plutôt que de faire un arbitraire integer ID de chaque en outre.
ascii_bin
classement. Si vous utilisez utf-8 en fonction de classement il réserve 3 ou 4 octets par caractère pour les colonnes de type CHAR au lieu de seulement 1.