web-dev-qa-db-fra.com

Comptez (*) sur InnoDB chaque fois que PHPMYADMIN charge

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

SELECT count(*) FROM Table

Par conséquent, j'ai évité ça. Mais je remarque que chaque fois que je me connecte à phpmyadmin, il exécutera automatiquement une count(*) pour ma table InnoDB avec des lignes 19K, qui peuvent prendre jusqu'à une minute pour exécuter. Pourtant, cela n'entraîne pas de telle count(*) pour l'autre table InnoDB avec 4 millions de lignes.

Un autre indice, en phpmyadmin, dans la colonne Documents d'enregistrements, le nombre d'enregistrements pour la table de rangée de 19 km montre la valeur exacte alors que la table de 4 millions de lignes montre une env.

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

La question est, est-ce qu'il y a un moyen d'arrêter Phpmyadmin de faire un tel compte sur ma table InnoDb? C'est bien de simplement donner une estimation au lieu de faire un compte de ligne coûteux chaque fois que je rafraîchis mon écran phpmyadmin.

8
Kenny

Modifier config.inc.php et modifier le paramètre pour maxexactcount .

[.____] $ CFG ['MaxexactCount'] 
 Type: Entier 
 Valeur par défaut: 500000 [ Obtenez le 
 Compte de la ligne exacte à l'aide de Select Compte. Si le nombre de lignes approximatives est retourné 
 Par SHOW Table Statut est inférieur à cette valeur, sélectionnez le nombre de comptes, 
 Sinon, le nombre approximatif sera utilisé. [.____]

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

$cfg['MaxExactCount']

Pour les tables d'Innodb, détermine la manière dont les tables de grande taille PHPMYADMIN doit obtenir le nombre exact des lignes à l'aide de SELECT COUNT. Si le nombre de lignes approximatives, comme retourné par SHOW TABLE STATUS est plus petit que cette valeur, SELECT COUNT sera utilisé, sinon le nombre approximatif sera utilisé.

Définissez simplement le seuil sur un nombre plus petit pour éviter les points select count(*) s.

1
Pacerier