java - Questions sur la clé primaire d'une table
过去多啦不再A梦
过去多啦不再A梦 2017-05-17 09:58:34
0
4
660

La plupart des clés primaires ne doivent être que des nombres entiers (auto-incrémentés) ou des codes uniques générés par le système (tels que l'UUID) ; j'aimerais demander quels sont les avantages et les inconvénients de chacun de ces deux, et j'espère parler de l'expérience réelle.

过去多啦不再A梦
过去多啦不再A梦

répondre à tous(4)
習慣沉默

L'ID à incrémentation automatique économise de l'espace de stockage et l'index de clé primaire n'a pas de problème d'insertion et de réorganisation. L'inconvénient est que la quantité de données est limitée et qu'un maximum de 2 ^ 63 enregistrements peuvent être stockés.
uuid est généralement une chaîne, qui consomme plus d'espace de stockage qu'un entier et nécessite une réorganisation de l'index lors de l'insertion. En principe, il n’y a pas de limite supérieure à la quantité.

Ty80

Type entier (l'index de MySQL est enregistré sous la forme d'un fichier, le type entier doit donc être plus petit que l'UUID), et comme il s'agit d'un type entier, l'efficacité de l'indexation doit être supérieure à l'UUID, mais comme il est automatiquement incrémenté, mysql le fera Lors de l'insertion de données, la table doit être verrouillée, ce qui entraîne une surcharge importante sur le serveur MySQL sous une grande concurrence. Et l'UUID est meilleur que l'auto-incrémentation entière pour gérer la concurrence

淡淡烟草味

uuid prend en charge la sous-bibliothèque

習慣沉默

Lorsque le champ est la clé primaire, le type entier économise de l'espace par rapport au type chaîne (rappelez-vous que int ne nécessite que 4 octets et char a un octet par caractère)
Lorsque le champ n'est pas la clé primaire, en plus de économisant de l'espace, le type entier économise plus d'espace que le type chaîne. Le type est beaucoup plus rapide et il grandit géométriquement en fonction de la longueur du caractère

Pour ceux qui recherchent la perfection, les données telles que les adresses IP sont également stockées dans la base de données à l'aide d'entiers (les chaînes d'adresses IP et les entiers ont un algorithme fixe).

Par exemple : si la valeur d'un champ est 1234567890 et qu'il n'y a pas de clé primaire
Lors d'une requête SQL où l'identifiant >= '1234567890'
le type int ne doit être comparé qu'une seule fois
le type char doit être comparé 10 fois, chacun personnage Tout le monde doit participer à la comparaison. Donc plus les caractères sont longs, plus la vitesse est lente

Si la quantité de données dans la base de données est suffisamment importante, vous pouvez facilement vérifier la vitesse de traitement des types de caractères en exécutant un code SQL similaire
où l'identifiant est comme « 123 % » limite 5 ;
où l'identifiant est comme « 1234 % » limite 5 ;
où j'aime « 12345 % » limite 5 ;
où j'aime « 123456 % » limite 5 ;
La vitesse d'exécution du SQL ci-dessus est à son tour plus lente. Car plus les caractères sont longs, plus ils sont comparés de fois.

Peu importe la longueur du type int, il n'est comparé qu'une seule fois

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal