2012-10-19 36 views
1

我在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 
..... 

有什么完美知道表中没有记录的程序?

+0

可能重复[最快的方式来获取innodb表的行数,在MySQL 4.0?](http://stackoverflow.com/questions/1191414/whats-the-quickest-way-to-get -ROW-计数的-innodb的桌式MySQL的-4-0) – Barmar

回答

1

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

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

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

the doc

部分存储引擎,如MyISAM,存储精确的数目。对于其他 存储引擎,如InnoDB,这个值是一个近似值,并且 可能会与实际值相差多达40到50%。在这种情况下, 使用SELECT COUNT(*)来获得准确的计数。