Tenemos una tabla en nuestra base de datos que tiene decenas de millones de entradas (10.1.21-MariaDB; motor de tabla InnoDB; sistema operativo Windows). Podemos obtener el número de filas en la tabla instantáneamente usando el comando SHOW TABLE STATUS LIKE 'my_table_name' . Sin embargo, SELECT COUNT(*) FROM my_table_name tarda unos minutos en completarse.
P) ¿Por qué SHOW TABLE STATUS LIKE 'my_table_name' es mucho más rápido que SELECT COUNT(*) FROM my_table_name ?
Porque una es una consulta que cuenta todas las filas y la otra es un comando que recupera las estadísticas que el motor de base de datos mantiene sobre la tabla. No hay ninguna garantía firme de que la estadística de la tabla esté actualizada, por lo que la única forma de obtener un recuento preciso es contar las filas, pero es posible que no necesite que sea perfectamente preciso todo el tiempo. Por lo tanto, puede elegir cualquiera, dependiendo de su deseo de precisión frente a velocidad, etc.
Vea aquí esta captura de pantalla de https://pingcap.com/docs/stable/sql-statements/sql-statement-show-table-status/
Puede ver que el ejemplo inserta 5 filas, pero las estadísticas de la tabla están desactualizadas y la tabla todavía informa 0 filas. Ejecutar ANALYZE TABLE llevará (probablemente) más tiempo que contar las filas, pero las estadísticas estarán actualizadas (al menos durante un tiempo) después.
Un enfoque sugerido para obtener un recuento razonablemente preciso del tamaño de la tabla, cuando SELECT COUNT(*) tarda mucho en completarse, podría ser:
ANALYZE TABLE my_table_name; SHOW TABLE STATUS LIKE 'my_table_name';
Esto resulta especialmente útil cuando se importa una gran cantidad de datos a una tabla y desea realizar un seguimiento del progreso del proceso de importación.