MySQL显示状态

MySQL显示状态,mysql,mysql-management,Mysql,Mysql Management,我有一个行数为48769914的表。问题在于查询数据库时存在虚假信息,即数据长度。关于如何纠正这种不良行为有什么想法吗 mysql> show table status like "events"\G *************************** 1. row *************************** Name: events Engine: InnoDB Version: 10 Row_format

我有一个行数为
48769914
的表。问题在于查询数据库时存在虚假信息,即数据长度。关于如何纠正这种不良行为有什么想法吗

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显示该数据的正确估计值。

InnoDB不在表状态中存储行数,因此这不是伪造的。您可以通过在需要行计数的位置运行
SELECT
查询来解决此问题。

InnoDB行计数不精确,因为InnoDB内部不跟踪记录计数,它只能通过表空间中分配的空间量来估计


有关更多信息,请参见手册中的

我想知道为什么
显示状态
返回无用信息,或者更确切地说是如何获取有用数据这是问题所在。对于48769914,零不是一个很好的近似值,将表中的其他数据(例如数据长度)放在一边。