El oficial MySQL 5.1 documentation reconoce que InnoDB no proporciona estadísticas precisas con SHOW TABLE STATUS
. Mientras que las tablas MYISAM mantienen específicamente un caché interno de metadatos, como el número de filas, etc., el motor InnoDB almacena datos e índices de tabla en */var/lib/mysql/ibdata **
InnoDB no tiene un archivo de índice expedient permitiendo una consulta rápida de números de fila.
SHOW TABLE STATUS
porque InnoDB estima dinámicamente el valor de 'Filas' muestreando un rango de los datos de la tabla (en */var/lib/mysql/ibdata **) y luego extrapola el número aproximado de filas Tanto es así que la documentación InnoDB reconoce número de fila inexactitud de hasta el 50% cuando se utiliza SHOW TABLE STATUS
documentación de MySQL sugiere el uso de la caché de consultas MySQL para obtener consultas número de fila consistente, pero los documentos no especifican cómo . Una explicación sucinta de cómo se puede hacer esto sigue.
En primer lugar, compruebe que el almacenamiento en caché de consultas está habilitado:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
Si el valor de have_query_cache es NO a continuación, habilitar la caché de consultas añadiendo las siguientes líneas a /etc/my.cnf y luego reinicia mysqld.
have_query_cache=1 # added 2017 08 24 wh
query_cache_size = 1048576
query_cache_type = 1
query_cache_limit = 1048576
(para más información ver http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)
consultar el contenido de la memoria caché con
mysql> SHOW STATUS LIKE 'Qcache%';
Ahora utiliza la sentencia SQL_CALC_FOUND_ROWS
en una consulta SELECT
:
SELECT SQL_CALC_FOUND_ROWS COUNT(*) FROM my_innodb_table
SQL_CALC_FOUND_ROWS
intentará Pt es una lectura desde el caché y, si no se encuentra esta consulta, ejecute la consulta en la tabla especificada y luego ingrese el número de filas de la tabla en el caché de consultas. Las ejecuciones adicionales de la consulta anterior (u otras declaraciones 'cacaotables' SELECT
- ver a continuación) consultarán la memoria caché y devolverán el resultado correcto.
posterior 'cachable' SELECT
queries - incluso si LIMIT
el resultado - consultará a la caché de consultas y permitirá obtener (una vez-off solamente) el número total de filas de la tabla con
SELECT FOUND_ROWS();
que devuelve correcta de la consulta en caché anterior total de la fila de la mesa.
Puede explicar qué quiere decir con interrogar a la caché de consultas para obtener las estadísticas PLZ? Comprendo el caché de consultas y cómo funciona, pero no estoy seguro de ver la relevancia del mismo aquí – carpii
He editado mi respuesta para explicar el uso del caché de consultas – venzen