COUNT (*) sur InnoDB à chaque chargement de phpMyAdmin

8

C'est un problème connu que innodb est lent dans

SELECT count(*) FROM Table

J'ai donc évité cela. Mais je remarque que chaque fois que je me connecte à phpmyadmin, il exécutera automatiquement un count(*)pour ma table innodb avec 19k lignes, ce qui peut prendre jusqu'à une minute pour s'exécuter. Pourtant, il ne l'initie pas count(*)pour l'autre table innodb avec 4 millions de lignes.

Un autre indice, en phpmyadmin, sous la colonne Records, le nombre d'enregistrements pour la table de 19k lignes affiche la valeur exacte tandis que la table de 4 millions de lignes affiche une env.

Je comprends que la table innodb donne une estimation du nombre de lignes. Mais il semble que pour une table plus petite, dans ce cas avec 19k lignes, phpmyadmin décide de faire un count(*)au lieu de simplement donner une estimation.

La question est, existe-t-il un moyen d'empêcher phpmyadmin de faire un tel compte sur ma table innodb? Il est normal de simplement donner une estimation au lieu de faire un nombre de lignes coûteux chaque fois que je rafraîchis mon écran phpmyadmin.

RolandoMySQLDBA
la source
Je pense que j'ai trouvé la réponse. Il y a un $ cfg ['MaxExactCount'] = 20000; dans les paramètres phpmyadmin. Seules les lignes de plus de 20k donneront une estimation. Ma prochaine question est, où puis-je modifier $ cfg ['MaxExactCount']?
@Kenny, remplacez simplement la valeur 20000par un nombre plus petit, par exemple 300, enregistrez le fichier, actualisez phpmyadmin et vous êtes prêt à partir.
Pacerier

Réponses:

3

Modifiez config.inc.php et modifiez le paramètre de MaxExactCount .

$ cfg ['MaxExactCount']
    Type: entier
    Valeur par défaut: 500000

Pour les tables InnoDB, détermine la taille des tables que phpMyAdmin doit obtenir 
nombre exact de lignes à l'aide de SELECT COUNT. Si la ligne approximative compte comme retournée
par SHOW TABLE STATUS est inférieur à cette valeur, SELECT COUNT sera utilisé, 
sinon, le nombre approximatif sera utilisé.
Mike Sherrill 'Cat Recall'
la source
Lien vers le bas ............
Pacerier
@Pacerier: meilleur lien.
Mike Sherrill 'Cat Recall'
1
Ah, maintenant vous avez rendu ma réponse superflue .......
Pacerier
1

phpMyAdmin ne fera un réel que select count(*) si le nombre estimé de lignes se situe dans le seuil défini (la valeur par défaut est 500k selon votre version):

$cfg['MaxExactCount']

Pour les tables InnoDB, détermine la taille des tables que phpMyAdmin doit obtenir avec le nombre de lignes exact SELECT COUNT. Si le nombre approximatif de lignes renvoyé par SHOW TABLE STATUSest inférieur à cette valeur, SELECT COUNTsera utilisé, sinon le nombre approximatif sera utilisé.

Réglez simplement le seuil sur un nombre plus petit pour éviter les select count(*)s inutiles .

Pacerier
la source