【问题标题】:will show table status display exact rows in the table?将显示表状态显示表中的确切行?
【发布时间】:2012-10-19 02:29:20
【问题描述】:

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

知道表中记录数的完美程序是什么?

【问题讨论】:

标签: mysql backup mysqldump table-statistics


【解决方案1】:

您的计数花了一个小时这一事实意味着您正在运行 InnoDB(它不会缓存此数据)。

因此,表格状态是基于其他因素的近似值,不可信。

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

来自the doc

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

【讨论】:

    【解决方案2】:

    在某些情况下,这不是一个好方法。

    对于 InnoDB 表,行数只是 SQL 优化中使用的粗略估计。 (如果 InnoDB 表是分区的,这也是如此。)

    测试:

    我有相同的数据库(在不同的服务器上转储和导​​入)两个 innoDB

    同桌:

    Server One: 49,231
    Server Two: 53,242
    

    49231 不正确,您可以在 phpmyadmin 中看到这个带有“~”标记的表格

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 1970-01-01
      • 2023-03-20
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多