COUNT (*) in InnoDB, wenn phpMyAdmin geladen wird

8

Es ist ein bekanntes Problem, bei dem innodb nur langsam vorgeht

SELECT count(*) FROM Table

Daher habe ich das vermieden. Ich stelle jedoch fest, dass bei jeder Anmeldung bei phpmyadmin automatisch eine count(*)für meine innodb-Tabelle mit 19.000 Zeilen ausgeführt wird, deren Ausführung bis zu einer Minute dauern kann. count(*)Für die andere innodb-Tabelle mit 4 Millionen Zeilen wird dies jedoch nicht initiiert .

Ein weiterer Hinweis in phpmyadmin in der Spalte Datensätze: Die Anzahl der Datensätze für die Tabelle mit 19.000 Zeilen zeigt den genauen Wert an, während in der Tabelle mit 4 Millionen Zeilen ein Wert von ca.

Ich verstehe, dass die innodb-Tabelle eine Schätzung der Zeilenanzahl gibt. Es scheint jedoch, dass phpmyadmin für eine kleinere Tabelle, in diesem Fall mit 19.000 Zeilen, eine Entscheidung trifft, count(*)anstatt nur eine Schätzung abzugeben .

Die Frage ist, gibt es eine Möglichkeit, phpmyadmin daran zu hindern, eine solche Zählung auf meinem Innodb-Tisch durchzuführen? Es ist in Ordnung, nur eine Schätzung abzugeben, anstatt eine teure Zeilenzählung durchzuführen, wenn ich meinen phpmyadmin-Bildschirm aktualisiere.

RolandoMySQLDBA
quelle
Ich glaube, ich habe die Antwort gefunden. Es gibt ein $ cfg ['MaxExactCount'] = 20000; in phpmyadmin Einstellungen. Nur Zeilen mit mehr als 20.000 geben eine Schätzung. Meine nächste Frage ist, wo bearbeite ich $ cfg ['MaxExactCount']?
@Kenny, überschreibe einfach den Wert 20000mit einer kleineren Zahl, z. B. 300speichere die Datei, aktualisiere phpmyadmin und du kannst loslegen.
Pacerier

Antworten:

3

Bearbeiten Sie config.inc.php und ändern Sie die Einstellung für MaxExactCount .

$ cfg ['MaxExactCount']
    Typ: Ganzzahl
    Standardwert: 500000

Legt für InnoDB-Tabellen fest, wie groß die Tabellen sein sollen, die phpMyAdmin erhalten soll 
genaue Zeilenanzahl mit SELECT COUNT. Wenn die ungefähre Zeilenanzahl als zurückgegeben gilt
Wenn SHOW TABLE STATUS kleiner als dieser Wert ist, wird SELECT COUNT verwendet. 
Andernfalls wird die ungefähre Anzahl verwendet.
Mike Sherrill 'Cat Recall'
quelle
Link down ............
Pacerier
@ Pacerier: Besserer Link.
Mike Sherrill 'Cat Recall'
1
Ah, jetzt hast du meine Antwort überflüssig gemacht .......
Pacerier
1

phpMyAdmin führt nur dann eine tatsächliche select count(*) Anzahl durch, wenn die geschätzte Anzahl der Zeilen innerhalb des festgelegten Schwellenwerts liegt (Standard ist 500 KB, abhängig von Ihrer Version):

$cfg['MaxExactCount']

Legt für InnoDB-Tabellen fest, für wie große Tabellen phpMyAdmin die genaue Zeilenanzahl verwenden soll SELECT COUNT. Wenn die von zurückgegebene ungefähre Zeilenanzahl SHOW TABLE STATUSkleiner als dieser Wert ist, SELECT COUNTwird sie verwendet, andernfalls wird die ungefähre Anzahl verwendet.

Stellen Sie einfach den Schwellenwert auf eine kleinere Zahl ein, um sinnlose select count(*)s zu vermeiden .

Pacerier
quelle