show table status会显示表中的精确行吗?

toiithl6  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(364)

我有一个数据库表,它是大约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
 .....

了解表中记录数的最佳程序是什么?

7kqas0il

7kqas0il1#

在某些情况下,这不是一个好办法。
对于innodb表,行数只是sql优化中使用的粗略估计(如果对innodb表进行分区,也是如此。)
测试:
我有相同的数据库(转储和导入到不同的服务器上)都是innodb
同一表格:

Server One: 49,231
Server Two: 53,242

49231不正确,您可以在phpmyadmin中看到带有“~”标记的表格

z8dt9xmd

z8dt9xmd2#

您的计数花费了一个小时,这意味着您正在运行innodb(它不会缓存这些数据)。
因此,表状态是基于其他因素的近似值,不可信。
计数()是准确的,但等待是痛苦的。
从文件中:
一些存储引擎(如myisam)存储精确的计数。对于其他存储引擎,比如innodb,这个值是一个近似值,可能与实际值相差40%到50%。在这种情况下,请使用select count(
)获得准确的计数。

相关问题