【问题标题】:MySQL show statusMySQL 显示状态
【发布时间】:2012-06-18 11:03:40
【问题描述】:

我有一个行数为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 显示该数据的正确估计值。

【问题讨论】:

  • 我想知道为什么show status返回无用信息或者更确切地说如何获取有用数据

标签: mysql mysql-management


【解决方案1】:

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

更多信息请参阅手册中的InnoDB restrictions

【讨论】:

  • 这就是问题所在。零不是 48769914 的一个很好的近似值,将表中的其他数据放在一边,例如 data_length。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多