web-dev-qa-db-fra.com

Nombre maximal d'enregistrements dans une table de base de données MySQL

Quelle est la limite supérieure des enregistrements pour la table de base de données MySQL. Je m'interroge sur le champ d'auto-incrémentation. Que se passerait-il si j'ajoutais des millions de disques? Comment gérer ce genre de situation? Merci!

161
xpepermint

les types mysql int peuvent faire pas mal de lignes: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

unsigned int la plus grande valeur est 4,294,967,295
unsigned bigint la plus grande valeur est 18,446,744,073,709,551,615

61
KM.

La plus grande valeur d'un entier a peu à voir avec le nombre maximum de lignes que vous pouvez stocker dans une table.

Il est vrai que si vous utilisez un int ou un bigint comme clé primaire, vous ne pouvez avoir autant de lignes que le nombre de valeurs uniques dans le type de données de votre clé primaire, mais vous n'avez pas besoin de transformer votre clé primaire en entier. , vous pourriez en faire un CHAR (100). Vous pouvez également déclarer la clé primaire sur plusieurs colonnes.

La taille de la table est soumise à d'autres contraintes que le nombre de lignes. Par exemple, vous pouvez utiliser un système d'exploitation ayant une limite de taille de fichier. Ou vous pourriez avoir un disque dur de 300 Go qui ne peut stocker que 300 millions de lignes si chaque ligne a une taille de 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 prend en charge 232 lignes par table, mais vous pouvez construire MySQL avec l’option --with-big-tables pour le supporter jusqu’à 264 lignes par table.

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

Le moteur de stockage InnoDB ne semble pas limiter le nombre de lignes, mais la taille de la table est limitée à 64 téraoctets. Cela dépend de la taille de chaque ligne.

224
Bill Karwin

Je suggère de ne jamais supprimer les données. Ne dites pas si la longueur des tables dépasse 1000, tronquez la fin de la table. Votre plan doit comporter une véritable logique métier, par exemple combien de temps cet utilisateur est-il inactif. Par exemple, s'il dure plus d'un an, placez-les dans un tableau différent. Cela se produirait toutes les semaines ou tous les mois dans un script de maintenance au milieu d'une période lente.

Lorsque vous rencontrez plusieurs lignes dans votre table, vous devez commencer à les diviser ou les partitionner et à classer les anciennes données dans les anciennes par année, telles que users_2011_jan, users_2011_feb ou utiliser des nombres pour le mois. Puis changez votre programmation pour travailler avec ce modèle. Créez peut-être une nouvelle table avec moins d’informations pour résumer les données en moins de colonnes et ne faites ensuite référence qu’aux grandes tables partitionnées lorsque vous avez besoin de plus d’informations, par exemple lorsque l’utilisateur visualise son profil. Tout cela doit être considéré avec beaucoup de soin pour qu’à l’avenir, il ne soit pas trop onéreux de le reformuler. Vous pouvez également ne placer que les utilisateurs qui consultent votre site tout le temps dans une seule table et les utilisateurs qui ne figurent jamais dans un ensemble archivé de tables.

12
PHPGuru

Dans InnoDB, avec une limite de taille de table de 64 téraoctets et une limite de taille de ligne MySQL de 65 535, il peut y avoir 1 073 741 824 lignes. Ce serait le nombre minimum d'enregistrements utilisant la limite maximale de taille de ligne. Toutefois, vous pouvez ajouter davantage d’enregistrements si la taille de la ligne est plus petite.

8
Xylo

Selon la section Évolutivité et limites de http://dev.mysql.com/doc/refman/5.6/en/features.html , support de MySQL pour les bases de données volumineuses. Ils utilisent MySQL Server avec des bases de données contenant 50 millions d’enregistrements. Certains utilisateurs utilisent MySQL Server avec 200 000 tables et environ 5 000 000 000 de lignes.

2
dataq

Lien http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

Limites de taille de ligne

La taille de ligne maximale pour une table donnée est déterminée par plusieurs facteurs:

La représentation interne d'une table MySQL a une limite de taille de ligne maximale de 65 535 octets, même si le moteur de stockage est capable de prendre en charge des lignes plus volumineuses. Les colonnes BLOB et TEXT ne contribuent que de 9 à 12 octets à la limite de taille de ligne, car leur contenu est stocké séparément du reste de la ligne.

La taille maximale des lignes d'une table InnoDB, qui s'applique aux données stockées localement dans une page de base de données, est légèrement inférieure à une demi-page pour les paramètres innodb_page_size de 4 Ko, 8 Ko, 16 Ko et 32 ​​Ko. Par exemple, la taille de ligne maximale est légèrement inférieure à 8 Ko pour la taille de page InnoDB de 16 Ko par défaut. Pour les pages de 64 Ko, la taille maximale des lignes est légèrement inférieure à 16 Ko. Voir Section 15.8.8, "Limites des tables InnoDB".

Si une ligne contenant des colonnes de longueur variable dépasse la taille de ligne maximale InnoDB, InnoDB sélectionne des colonnes de longueur variable pour le stockage externe hors page jusqu'à ce que la ligne respecte la limite de taille de ligne InnoDB. La quantité de données stockées localement pour les colonnes de longueur variable stockées hors page varie selon le format de la ligne. Pour plus d'informations, reportez-vous à la Section 15.11, "Stockage et formats de lignes InnoDB".

Différents formats de stockage utilisent différentes quantités d'en-tête de page et de données de fin, ce qui affecte la quantité de stockage disponible pour les lignes.

Pour plus d'informations sur les formats de lignes InnoDB, reportez-vous à la Section 15.11, "Stockage et formats de lignes InnoDB" et à la Section 15.8.3, "Structure physique des lignes des tables InnoDB".

Pour plus d'informations sur les formats de stockage MyISAM, reportez-vous à la Section 16.2.3, "Formats de stockage de la table MyISAM".

http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html

1
N Islam

Limites de taille de ligne

The maximum row size for a given table is determined by several factors:
  • La représentation interne d'une table MySQL a une limite de taille de ligne maximale de 65 535 octets, même si le moteur de stockage est capable de prendre en charge des lignes plus volumineuses. Les colonnes BLOB et TEXT ne contribuent que de 9 à 12 octets à la limite de taille de ligne, car leur contenu est stocké séparément du reste de la ligne.

  • La taille de ligne maximale d'une table InnoDB, qui s'applique aux données stockées localement dans une page de base de données, est légèrement inférieure à la moitié d'une page. Par exemple, la taille de ligne maximale est légèrement inférieure à 8 Ko pour la taille de page InnoDB par défaut de 16 Ko, définie par l'option de configuration innodb_page_size. “ Limites sur les tables InnoDB ”.

  • Si une ligne contenant des colonnes de longueur variable dépasse la taille de ligne maximale InnoDB, InnoDB sélectionne des colonnes de longueur variable pour le stockage externe hors page jusqu'à ce que la ligne respecte la limite de taille de ligne InnoDB. La quantité de données stockées localement pour les colonnes de longueur variable stockées hors page varie selon le format de la ligne. Pour plus d'informations, voir " Stockages et formats de lignes InnoDB ".
  • Différents formats de stockage utilisent différentes quantités d'en-tête de page et de données de fin, ce qui affecte la quantité de stockage disponible pour les lignes.
1