COUNT (*) en InnoDB cada vez que se carga phpMyAdmin

8

Es un problema conocido que innodb es lento en

SELECT count(*) FROM Table

Por eso lo evité. Pero noto que cada vez que inicio sesión en phpmyadmin, se ejecutará automáticamente count(*)para mi tabla innodb con 19k filas, lo que puede tomar hasta un minuto en ejecutarse. Sin embargo, no se inicia así count(*)para la otra tabla innodb con 4 millones de filas.

Otra pista, en phpmyadmin, bajo la columna Registros, el número de registros para la tabla de 19k filas muestra el valor exacto, mientras que la tabla de 4 millones de filas muestra un aprox.

Entiendo que innodb table da una estimación del recuento de filas. Pero parece que para una tabla más pequeña, en este caso con 19k filas, phpmyadmin decide hacer una en count(*)lugar de solo dar una estimación.

La pregunta es, ¿hay alguna manera de evitar que phpmyadmin cuente en mi mesa innodb? Está bien dar una estimación en lugar de hacer un recuento costoso de filas cada vez que actualizo mi pantalla phpmyadmin.

RolandoMySQLDBA
fuente
Creo que encontré la respuesta. Hay un $ cfg ['MaxExactCount'] = 20000; en la configuración de phpmyadmin. Solo las filas de más de 20k darán una estimación. Mi siguiente pregunta es, ¿dónde edito $ cfg ['MaxExactCount']?
@ Kenny, simplemente sobrescriba el valor 20000con un número menor, por ejemplo 300, guarde el archivo, actualice phpmyadmin y estará listo.
Pacerier

Respuestas:

3

Edite config.inc.php y cambie la configuración de MaxExactCount .

$ cfg ['MaxExactCount']
    Tipo: entero
    Valor predeterminado: 500000

Para las tablas InnoDB, determina la cantidad de tablas grandes que phpMyAdmin debe obtener 
recuento exacto de filas usando SELECT COUNT. Si la fila aproximada cuenta como devuelta
por SHOW TABLE STATUS es menor que este valor, se utilizará SELECT COUNT, 
de lo contrario, se utilizará el recuento aproximado.
Mike Sherrill 'Retiro del gato'
fuente
Enlace hacia abajo ............
Pacerier
@Pacerier: mejor enlace.
Mike Sherrill 'Cat Recall'
1
Ah, ahora hiciste mi respuesta redundante .......
Pacerier
1

phpMyAdmin solo hará un real select count(*) si el número estimado de filas está dentro del umbral establecido (el valor predeterminado es 500k dependiendo de su versión):

$cfg['MaxExactCount']

Para las tablas InnoDB, determina de qué manera las tablas grandes phpMyAdmin deben obtener el recuento exacto de filas utilizando SELECT COUNT. Si se utilizará el recuento aproximado de filas devuelto por SHOW TABLE STATUSes menor que este valor, de SELECT COUNTlo contrario se utilizará el recuento aproximado.

Simplemente configure el umbral en un número menor para evitar select count(*)s sin sentido .

Pacerier
fuente