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


知道表中记录数的最佳过程是什么?

最佳答案

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

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

count(*)将是准确的,但要等待很痛苦。

the doc


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

关于mysql - 将显示表状态显示表中的确切行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54080308/

10-09 19:27