La plus grande valeur d'un nombre entier n'a pas grand-chose à voir avec le nombre maximal de lignes que vous pouvez stocker dans un tableau.
Il est vrai que si vous utilisez un int ou un bigint comme clé primaire, vous ne pouvez avoir qu'autant de lignes que le nombre de valeurs uniques dans le type de données de votre clé primaire, mais vous n'êtes pas obligé de faire de votre clé primaire un integer, vous pouvez en faire un CHAR(100). Vous pouvez également déclarer la clé primaire sur plus d'une colonne.
Il existe d'autres contraintes sur la taille des tableaux que le nombre de lignes. Par exemple, vous pouvez utiliser un système d'exploitation dont la taille des fichiers est limitée. Ou vous pouvez avoir un disque dur de 300 Go qui ne peut stocker que 300 millions de lignes si chaque ligne fait 1 Ko.
Les limites de la taille de la base de données sont vraiment élevées :
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
Le moteur de stockage MyISAM supporte 2 32 rangs par table, mais vous pouvez construire MySQL avec le format --with-big-tables
option pour qu'il supporte jusqu'à 2 64 rangs par table.
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
Le moteur de stockage InnoDB possède un ID de ligne interne de 6 octets par table, de sorte qu'il y a un nombre maximum de lignes égal à 2. 48 soit 281.474.976.710.656.
Un tablespace InnoDB a également une limite de taille de table de 64 téraoctets. Le nombre de lignes entrant dans cette limite dépend de la taille de chaque ligne.
La limite de 64 To suppose une taille de page par défaut de 16 Ko. Vous pouvez augmenter la taille des pages, et donc augmenter le tablespace jusqu'à 256 To. Mais je pense que vous trouverez d'autres facteurs de performance qui rendent cela déconseillé bien avant que vous ne fassiez croître une table à cette taille.
2 votes
Du moins, si ma mémoire est bonne, la limite est fixée par le moteur de stockage, donc (par exemple) en utilisant MyISAM vous obtenez une limite différente de celle en utilisant InnoDB.
82 votes
@Onion-Knight : Je ne suis pas d'accord. Il est normal d'insérer des millions de rangées dans une seule table, et certaines bases de données ont une limite, donc cela vaut la peine de demander. Si l'on demande si MySQL supporte des millions de tableaux alors c'est probablement le signe d'une erreur architecturale.