J'ai une table MySQL InnoDB avec 1 000 000 enregistrements. Est-ce trop? Ou les bases de données peuvent gérer cela et plus encore? Je demande parce que j'ai remarqué que certaines requêtes (par exemple, obtenir la dernière ligne d'une table) sont plus lentes (secondes) dans la table avec 1 million de lignes que dans une avec 100.
la source
J'ai une base de données avec plus de 97 000 000 enregistrements ( fichier de données de 30 Go ) et je n'ai aucun problème.
N'oubliez pas de définir et d'améliorer votre index de table .
Il est donc évident que 1 000 000 n'est pas BEAUCOUP! (Mais si vous n'indexez pas; oui, c'est BEAUCOUP)
la source
Utilisez «expliquer» pour examiner votre requête et voir s'il y a un problème avec le plan de requête.
la source
EXPLAIN
- débutants ou non.EXPLAIN
;)Je pense que c'est une idée fausse courante - la taille n'est qu'une partie de l'équation en ce qui concerne l'évolutivité de la base de données. Il y a d'autres problèmes qui sont difficiles (ou plus difficiles):
Quelle est la taille de l'ensemble de travail (c'est-à-dire la quantité de données à charger en mémoire et à travailler activement). Si vous insérez simplement des données et que vous ne faites rien avec, c'est en fait un problème facile à résoudre.
Quel niveau de concurrence est requis? Y a-t-il un seul utilisateur qui insère / lit, ou avons-nous plusieurs milliers de clients fonctionnant à la fois?
Quels niveaux de promesse / durabilité et constance de performance sont nécessaires? Devons-nous nous assurer que nous pouvons honorer chaque engagement. Est-il correct si la transaction moyenne est rapide ou voulons-nous nous assurer que toutes les transactions sont fiables et rapides (contrôle de qualité six sigma comme - http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization- et-six-sigma / ).
Avez-vous besoin de faire des problèmes opérationnels, tels que ALTER le schéma de table? Dans InnoDB c'est possible, mais incroyablement lent car il faut souvent créer une table temporaire au premier plan (bloquant toutes les connexions).
Je vais donc dire que les deux problèmes limitatifs vont être:
la source
Si vous voulez dire 1 million de lignes, cela dépend de la façon dont votre indexation est effectuée et de la configuration de votre matériel. Un million de lignes n'est pas une grande quantité pour une base de données d'entreprise, ou même une base de données de développement sur un équipement décent.
si vous voulez dire 1 million de colonnes (pas sûr que ce soit même possible dans MySQL) alors oui, cela semble un peu volumineux et causera probablement des problèmes.
la source
S'inscrire? Voulez-vous dire enregistrement?
Un million d'enregistrements n'est pas vraiment un gros problème pour une base de données de nos jours. Si vous rencontrez un problème, ce n'est probablement pas le système de base de données lui-même, mais plutôt le matériel sur lequel vous l'exécutez. Vous n'allez pas rencontrer de problème avec la base de données avant de manquer de matériel pour le résoudre, très probablement.
Maintenant, évidemment, certaines requêtes sont plus lentes que d'autres, mais si deux requêtes très similaires s'exécutent à des moments très différents, vous devez déterminer quel est le plan d'exécution de la base de données et l'optimiser, c'est-à-dire utiliser des index corrects, une normalisation appropriée, etc.
Incidemment, il n'y a pas de "dernier" enregistrement dans une table, d'un point de vue logique, ils n'ont pas d'ordre inhérent.
la source
SELECT LAST_INSERT_ID()
au lieu de cette requête.J'ai vu des tables non partitionnées avec plusieurs milliards d'enregistrements (indexés), qui se sont auto-jointes pour un travail analytique. Nous avons finalement partitionné la chose mais honnêtement, nous n'avons pas vu beaucoup de différence.
Cela dit, c'était dans Oracle et je n'ai pas testé ce volume de données dans MySQL. Les index sont votre ami :)
la source
En supposant que vous entendiez «enregistrements» par «registres» non, ce n'est pas trop, MySQL évolue très bien et peut contenir autant d'enregistrements que vous en avez sur votre disque dur.
De toute évidence, les requêtes de recherche seront plus lentes. Il n'y a vraiment aucun moyen de contourner cela si ce n'est de s'assurer que les champs sont correctement indexés.
la source
Plus la table est volumineuse (comme dans plus de lignes), plus les requêtes seront lentes en général s'il n'y a pas d'index. Une fois que vous avez ajouté les bons index, les performances de vos requêtes devraient s'améliorer ou du moins ne pas se dégrader autant que la table grandit. Cependant, si la requête elle-même renvoie plus de lignes à mesure que la table s'agrandit, vous recommencerez à voir une dégradation.
Bien que 1 million de lignes ne soient pas si nombreuses, cela dépend également de la quantité de mémoire dont vous disposez sur le serveur de base de données. Si la table est trop grande pour être mise en cache en mémoire par le serveur, les requêtes seront plus lentes.
la source
L'utilisation de la requête fournie sera exceptionnellement lente en raison de l'utilisation d'une méthode de tri et de fusion pour trier les données.
Je recommanderais de repenser la conception afin que vous utilisiez des index pour la récupérer ou assurez-vous qu'elle est déjà ordonnée de cette manière, aucun tri n'est donc nécessaire.
la source