web-dev-qa-db-fra.com

Quel est le plus grand numéro d'identification que l'auto-incrémentation peut produire dans mysql

J'ai une base de données qui est rapidement remplie de données dont nous parlons de 10 à 20 000 lignes par jour.

Quelle est la limite d'une identification avec option d'auto-incrémentation? Si l'ID est créé en tant que INTEGER, puis-je faire une valeur maximale de 2 147 483 647 pour les valeurs non signées?

Mais que se passe-t-il lorsque l'auto-incrémentation va au-dessus de cela? Est-ce que tout s'effondre? Quelle serait alors la solution?

Je suis sûr que beaucoup de gens ont de grosses bases de données et j'aimerais les entendre.

Merci.

56
user123_456

Si vous craignez qu'il ne se développe trop rapidement hors des limites, je définirais le PK comme UN BIGINT NON SIGNÉ. Cela vous donne une valeur maximale de 18446744073709551615, ce qui devrait être suffisant.

61
Dan Armstrong
                    | Min. (inclusive)           | Max. (inclusive)
-----------------------------------------------------------------------------
INT Signed (+|-)    |             -2,147,483,648 |             +2,147,483,647
-----------------------------------------------------------------------------
INT Unsigned (+)    |                          0 |              4,294,967,295
-----------------------------------------------------------------------------
BIGINT Signed (+|-) | -9,223,372,036,854,775,807 | +9,223,372,036,854,775,806
-----------------------------------------------------------------------------
BIGINT Unsigned (+) |                          0 | 18,446,744,073,709,551,615

référence MySQL .

Si vous avez une table mysql avec l'ID de colonne (INT non signé) et que la table a 4 294 967 295 enregistrements, alors vous essayez d'insérer 1 autre enregistrement, l'ID du nouvel enregistrement sera automatiquement modifié et défini au maximum qui est "4 294 967 295", vous obtenez donc un message d'erreur MySQL Duplicate entry '4294967295' for key 'PRIMARY', vous aurez des ID en double si la colonne est définie comme clé primaire.

2 Solutions possibles:

  1. Approche facile : étendre les limites, en définissant l'ID sur BIGINT non signé , tout comme ce que Dan Armstrong a dit. Bien que cela ne signifie pas qu'il est incassable! et les performances peuvent être affectées lorsque la table devient vraiment volumineuse.
  2. Approche plus difficile : tiliser le partitionnement, qui est une approche un peu plus compliquée, mais offre de meilleures performances et vraiment aucune limite de base de données ( Votre seule limite est la taille de votre disque dur physique.). Twitter (et d'énormes sites Web similaires) utilisent cette approche pour leurs millions de tweets (enregistrements) par jour!
28
evilReiko