83 votes

Combien de lignes d'une base de données sont TROP NOMBREUSES ?

J'ai une table MySQL InnoDB avec 1 000 000 d'enregistrements. Est-ce trop ? Ou les bases de données peuvent-elles gérer cela et plus encore ? Je pose la question parce que j'ai remarqué que certaines requêtes (par exemple, obtenir la dernière ligne d'une table) sont plus lentes (en secondes) dans la table de 1 million de lignes que dans celle de 100.

109voto

OMG Ponies Points 144785

J'ai une table MySQL InnoDB avec 1000000 registres. Est-ce trop ?

Non, 1 000 000 rangs (AKA records), ce n'est pas trop pour une base de données.

Je pose la question parce que j'ai remarqué que certaines requêtes (par exemple, obtenir le dernier registre d'une table) sont plus lentes (en secondes) dans la table avec 1 million de registres que dans celle avec 100.

Il y a beaucoup de choses à prendre en compte dans cette déclaration. Les suspects habituels sont :

  1. Requête mal rédigée
  2. Ne pas utiliser de clé primaire, à supposer qu'il en existe une dans la table.
  3. Modèle de données mal conçu (structure des tableaux)
  4. Absence d'index

62voto

amir beygi Points 544

J'ai une base de données contenant plus de 97,000,000 enregistrements( Fichier de données de 30 Go ), et n'ayant aucun problème .

N'oubliez pas de définir et d'améliorer votre table index .

Il est donc évident que 1,000,000 n'est pas NOMBREUX ! (Mais si vous n'indexez pas, oui, c'est BEAUCOUP)

18voto

Utilisez "explain" pour examiner votre requête et voir s'il y a un problème avec le plan de requête.

13voto

Morgan Tocker Points 1876

Je pense qu'il s'agit d'une idée fausse très répandue : la taille n'est qu'une partie de l'équation lorsqu'il s'agit de l'évolutivité d'une base de données. Il y a d'autres questions qui sont difficiles (ou plus difficiles) :

  • La taille de l'ensemble de travail (c'est-à-dire la quantité de données à charger en mémoire et à traiter activement). Si vous vous contentez d'insérer des données et de ne rien en faire, le problème est en fait facile à résoudre.

  • Quel est le niveau de concurrence requis ? Y a-t-il un seul utilisateur qui insère/lit ou avons-nous plusieurs milliers de clients qui opèrent en même temps ?

  • Quels sont les niveaux de promesse/durabilité et de constance des performances requis ? Devons-nous nous assurer que nous pouvons honorer chaque engagement ? Est-il acceptable que la transaction moyenne soit rapide, ou voulons-nous nous assurer que toutes les transactions sont fiables et rapides (contrôle de qualité six sigma) ? http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization-and-six-sigma/ ).

  • Devez-vous procéder à des opérations telles que ALTER le schéma de la table ? Avec InnoDB, c'est possible, mais incroyablement lent car il faut souvent créer une table temporaire au premier plan (ce qui bloque toutes les connexions).

Je vais donc indiquer que les deux questions limitatives seront les suivantes :

  • Vos propres compétences en matière d'écriture de requêtes et d'indexation.
  • Le degré de douleur que vous pouvez tolérer en attendant les instructions ALTER TABLE.

3voto

Xepoch Points 4018

J'ai vu des tables non partitionnées contenant plusieurs milliards d'enregistrements (indexés) qui s'auto-joignaient pour des travaux analytiques. Nous avons fini par les partitionner, mais honnêtement, nous n'avons pas vu beaucoup de différence.

Cela dit, il s'agissait d'Oracle et je n'ai pas testé un tel volume de données dans MySQL. Les index sont votre ami :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X