MySQL显示状态

时间:2012-06-18 11:03:40

标签: mysql mysql-management

我的表格的行数为48769914。问题是查询数据库时的伪造信息,即data_length。关于如何纠正这种不端行为的任何想法?

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

2 个答案:

答案 0 :(得分:2)

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

有关详细信息,请参阅手册中的InnoDB restrictions

答案 1 :(得分:0)

InnoDB不会将行计数存储在表状态中,因此不会造成伪造。您可以通过在需要行计数的SELECT查询中解决此问题。