COUNT (*) su InnoDB ogni volta che phpMyAdmin viene caricato


8

È un problema noto in cui innodb è lento

SELECT count(*) FROM Table

Quindi l'ho evitato. Ma noto che ogni volta che accedo a phpmyadmin, eseguirà automaticamente un count(*)per la mia tabella innodb con 19k righe, che può richiedere fino a un minuto per l'esecuzione. Tuttavia non avvia tale count(*)per l'altra tabella innodb con 4 milioni di righe.

Un altro indizio, in phpmyadmin, sotto la colonna Records, il numero di record per la tabella a 19k righe mostra il valore esatto mentre la tabella a 4 milioni di righe mostra un valore di ca.

Capisco che la tabella innodb fornisce una stima del conteggio delle righe. Ma sembra che per tabelle più piccole, in questo caso con 19k righe, phpmyadmin decide di fare un count(*)invece di dare una stima.

La domanda è: c'è un modo per impedire a phpmyadmin di fare un simile conteggio sulla mia tabella innodb? Va bene dare una stima invece di fare un conteggio delle righe costoso ogni volta che aggiorno la mia schermata phpmyadmin.


Penso di aver trovato la risposta. C'è $ cfg ['MaxExactCount'] = 20000; nelle impostazioni di phpmyadmin. Solo le righe più di 20k forniranno una stima. La mia prossima domanda è: dove posso modificare $ cfg ['MaxExactCount']?

@Kenny, sovrascrivi semplicemente il valore 20000con un numero più piccolo, ad esempio 300, salva il file, aggiorna phpmyadmin e sei pronto per iniziare.
Pacerier,

Risposte:


3

Modifica config.inc.php e modifica l'impostazione per MaxExactCount .

$ Cfg [ 'MaxExactCount']
    Tipo: intero
    Valore predefinito: 500000

Per le tabelle InnoDB, determina la dimensione delle tabelle che phpMyAdmin dovrebbe ottenere 
conteggio esatto delle righe usando SELEZIONA CONTEGGIO. Se la riga approssimativa conta come restituita
di SHOW TABLE STATUS è inferiore a questo valore, verrà utilizzato SELECT COUNT, 
in caso contrario verrà utilizzato il conteggio approssimativo.

Link in basso ............
Pacerier

@Pacerier: collegamento migliore.
Mike Sherrill "Cat Recall",

1
Ah, ora hai reso la mia risposta ridondante .......
Pacerier,

1

phpMyAdmin farà un effettivo solo select count(*) se il numero stimato di righe rientra nella soglia impostata (il valore predefinito è 500k a seconda della versione):

$cfg['MaxExactCount']

Per le tabelle InnoDB, determina in che misura le tabelle di grandi dimensioni phpMyAdmin dovrebbero ottenere il conteggio esatto delle righe utilizzando SELECT COUNT. Se il conteggio approssimativo delle righe restituito da SHOW TABLE STATUSè inferiore a questo valore, SELECT COUNTverrà utilizzato, altrimenti verrà utilizzato il conteggio approssimativo.

Basta impostare la soglia su un numero più piccolo per evitare select count(*)s inutili .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.