2011-09-15 5 views
1

Dans ma base de données, il y a deux grandes tables. Le premier (A) a 1,7 million de lignes, le second (B): 2,1 millions. Les enregistrements dans A et B ont une taille assez identique.MySQL - Problème de base avec une grande table

Je peux effectuer n'importe quelle opération sur A. Cela prend du temps, mais cela fonctionne. Sur B, je ne peux rien faire. Même un simple décompte (*) reste suspendu à jamais. Le problème est que je ne vois aucune erreur: elle se bloque (quand je montre la liste des processus, elle dit simplement "mise à jour" pour toujours).

Il me semble bizarre que le petit delta (en pourcentage) entre 1,7 et 2,1 millions puisse faire une telle différence (de pouvoir tout faire, de ne plus pouvoir faire l'opération la plus simple).

Peut-il y avoir une sorte de limite dure de 2 millions de lignes?

Je suis sur Linux 2.6+, et j'utilise innoDB.

Merci! Pierre

+0

Carmac le Magnifique dit: La réponse que vous cherchez implique votre stratégie d'indexation. – JohnFx

+0

Plus de données dans votre tableau plus lentement ce sera. Est un fait. Mais jetez un coup d'œil dans vos index, à coup sûr une bonne indexation vous aidera. – B4NZ41

+0

Vérifiez également vos paramètres db concernant InnoDB. Les paramètres par défaut ne sont pas optimisés pour l'utilisation d'InnoDB. –

Répondre

1

Il semble que cela dépend plus de la quantité de données dans chaque ligne que du nombre total de lignes. Si les lignes contiennent peu de données, le nombre maximal de lignes renvoyées sera supérieur à celui des lignes contenant plus de données. Vérifiez ce lien pour plus d'informations:

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

0

La taille de ligne (le nombre d'octets nécessaires pour stocker une ligne) pourrait être beaucoup plus grande pour la deuxième table. Count (*) peut nécessiter une analyse complète de la table, c'est-à-dire lire toute la table sur le disque. De plus grandes lignes signifient plus d'E/S et plus de temps.

La présence/l'absence d'index fera probablement la différence.

0

Comme je le disais dans mon message initial, les deux tables étaient assez similaires, donc la taille des rangées serait assez proche dans les deux tables. C'est pourquoi j'ai été un peu surpris, et j'ai commencé à penser que peut-être, en quelque sorte, une limite de 2 millions a été fixée quelque part.

Il s'avère que ma table était corrompue. C'est bizarre car j'étais encore capable d'accéder à certains enregistrements (en utilisant des jointures avec d'autres tables), et mySQL ne se plaignait pas. J'ai découvert en faisant une table de contrôle: il n'a pas retourné d'erreur, mais il s'est écrasé mysqld à chaque fois ...

En tout cas, merci à tous pour votre aide à ce sujet.

Pierre

Questions connexes