2012-06-18 88 views
0

我有一个表的行计数为48769914。问题是查询数据库时的虚假信息,即data_length。任何想法如何纠正这种不端行为?MySQL显示状态

mysql> show table status like "events"\G 
*************************** 1. row *************************** 
      Name: events 
     Engine: InnoDB 
     Version: 10 
    Row_format: Compact 
      Rows: 0 
Avg_row_length: 0 
    Data_length: 16384 
Max_data_length: 0 
    Index_length: 32768 
     Data_free: 7405043712 
Auto_increment: 59816602 
    Create_time: 2012-06-05 05:12:37 
    Update_time: NULL 
    Check_time: NULL 
     Collation: utf8_general_ci 
     Checksum: NULL 
Create_options: 
     Comment: 
1 row in set (0.88 sec) 

精确计数:

mysql> select count(id) from events; 
+-----------+ 
| count(id) | 
+-----------+ 
| 48769914 | 
+-----------+ 
1 row in set (5 min 37.67 sec) 

更新状态信息看起来像表是空的。零行,零行长度和表中基本没有数据。我怎样才能让MySQL显示正确的数据估计。

+0

正是u需要什么看InnoDB restrictions手册中? –

+0

我想知道为什么'show status'返回无用的信息,或者说如何获得有用的数据 – cpower

回答

0

InnoDB不会在表状态中存储行计数,因此不是伪造的。你可以通过在你想要行数的地方运行你的SELECT查询来解决这个问题。

2

InnoDB的行数并不准确,因为InnoDB并没有记录内部记录的数量,它只能通过表空间中分配的空间量来估计它。

了解更多信息

+0

这就是问题所在。对于48769914,零不是一个很好的近似值,为表格预留了其他数据,例如data_length。 – cpower