You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL information_schema.TABLE_ROWS与COUNT(*)结果不一致疑问

问题

我原本认为information_schema.partitions表中的TABLE_ROWS字段值应当与COUNT(*)查询结果完全一致,但在查询lootinfo分区表时发现二者数值存在差异,且两次查询执行间隔内未对表执行任何行插入、删除操作,想确认这种差异是否可能正常出现?
具体查询语句及返回结果如下:

mysql> select partition_name, partition_ordinal_position, table_rows from information_schema.partitions where table_name='lootinfo';
+----------------+----------------------------+------------+
| PARTITION_NAME | PARTITION_ORDINAL_POSITION | TABLE_ROWS |
+----------------+----------------------------+------------+
| future         |                          3 |          0 |
| p_202206       |                          1 |      10676 |
| p_202207       |                          2 |          0 |
+----------------+----------------------------+------------+
3 rows in set (0.00 sec)

mysql> select count(*) from lootinfo partition (p_202206);
+----------+
| count(*) |
+----------+
|    10360 |
+----------+
1 row in set (0.00 sec)
解答

这种差异是正常现象,不属于数据错误。

  • information_schema.partitions中的TABLE_ROWS是存储引擎维护的估算统计值,并非实时精确计数。以最常用的InnoDB引擎为例,该值通过采样数据页计算得出,本身就允许和实际行数存在偏差,偏差大小和采样率、数据页碎片化程度都有关系,和查询间隔内是否有增删操作无关。
  • COUNT(*)执行时会实际扫描对应分区的存储数据,返回的是精确的真实行数,是统计行数的可靠依据。
  • 若需要让TABLE_ROWS的估算值更贴近真实值,可以执行ANALYZE TABLE lootinfo;命令手动更新表统计信息,更新后估算偏差会缩小,但无法保证和COUNT(*)结果完全一致。

内容的提问来源于stack exchange,提问作者Ellisein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:51:22