我有一个数据库表,它是大约90 gb的空间。我试着数一数表中的行数 select count(idNewsNotification) from notification
结果呢
4982397 1 row in set (59 min 48.35 sec)
但当我用 show table status like <table_name>
这表明
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 8631267
Avg_row_length: 11237
Data_length: 96996425728
Max_data_length: 0
Index_length: 175374336
Data_free: 0
Auto_increment: NULL
.....
了解表中记录数的最佳程序是什么?
2条答案
按热度按时间r7knjye21#
您的计数花费了一个小时,这意味着您正在运行innodb(它不会缓存这些数据)。
因此,表状态是基于其他因素的近似值,不可信。
计数()是准确的,但等待是痛苦的。
从文件中:
一些存储引擎(如myisam)存储精确的计数。对于其他存储引擎,比如innodb,这个值是一个近似值,可能与实际值相差40%到50%。在这种情况下,请使用select count()获得准确的计数。
2vuwiymt2#
在某些情况下,这不是一个好办法。
对于innodb表,行数只是sql优化中使用的粗略估计(如果对innodb表进行分区,也是如此。)
测试:
我有相同的数据库(转储和导入到不同的服务器上)都是innodb
同一表格:
49231不正确,您可以在phpmyadmin中看到带有“~”标记的表格