将显示表状态显示表中的确切行?

时间:2012-10-19 02:29:21

标签: mysql backup mysqldump table-statistics

我在DB中有一个表,空间大约为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 个答案:

答案 0 :(得分:2)

您的计数需要一个小时的事实意味着您正在运行InnoDB(它不会缓存此数据)。

因此,表状态是基于其他因素的近似值,并且不可信任。

计数(*)是准确的,但是等待的痛苦。

来自the doc

  

某些存储引擎(如MyISAM)会存储确切的计数。对于其他   存储引擎,如InnoDB,这个值是近似值,和   可能会从实际值变化多达40%至50%。在这种情况下,   使用SELECT COUNT(*)来获得准确的计数。

答案 1 :(得分:0)

在某些情况下,这不是一个好的。

  

对于InnoDB表,行计数只是SQL优化中使用的粗略估计。 (如果对InnoDB表进行分区,也是如此。)

<强> TEST:

我有相同的db(在不同服务器上转储和导​​入)都是innoDB

同桌:

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

49231不正确,您可以在&#34;〜&#34;在phpmyadmin中标记