Quiero una forma rápida de contar el número de filas en mi tabla que tiene varios millones de filas. Encontré la publicación " MySQL: la forma más rápida de contar el número de filas " en Stack Overflow, que parecía resolver mi problema. Bayuah proporcionó esta respuesta:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
Lo que me gustó porque parece una búsqueda en lugar de un escaneo, por lo que debería ser rápido, pero decidí probarlo
SELECT COUNT(*) FROM table
para ver cuánta diferencia de rendimiento hubo.
Lamentablemente, obtengo diferentes respuestas como se muestra a continuación:
Pregunta
¿Por qué las respuestas son diferentes en aproximadamente 2 millones de filas? Supongo que la consulta que realiza un escaneo completo de la tabla es el número más preciso, pero ¿hay alguna manera de obtener el número correcto sin tener que ejecutar esta consulta lenta?
Corrí ANALYZE TABLE data_302
, que completó en 0.05 segundos. Cuando ejecuté la consulta nuevamente, ahora obtengo un resultado mucho más cercano de 34384599 filas, pero todavía no es el mismo número que select count(*)
con 34906061 filas. ¿Analiza la devolución de la tabla inmediatamente y procesa en segundo plano? Siento que vale la pena mencionar que esta es una base de datos de prueba y actualmente no se está escribiendo en ella.
A nadie le importará si solo se trata de decirle a alguien qué tan grande es una tabla, pero quería pasar el recuento de filas a un bit de código que usaría esa cifra para crear consultas asincrónicas de "igual tamaño" para consultar la base de datos en paralelo, similar al método que se muestra en Aumento del rendimiento de consultas lentas con la ejecución de consultas paralelas por Alexander Rubin. Tal como está, obtendré la identificación más alta SELECT id from table_name order by id DESC limit 1
y espero que mis tablas no se fragmenten demasiado.
NUM_ROWS
columna