MySQL显示总计和计数查询中的行数不同

Siv*_*iva 4 mysql phpmyadmin

我对 MySQL 中的行数感到困惑。phpMyAdmin 和 count 查询返回的总行数不同。

我的表结构是InnoDB.

Showing rows 0 - 24 (655537 total, Query took 0.1527 seconds.)
Run Code Online (Sandbox Code Playgroud)

这是浏览表格时的结果。

我的计数查询是

SELECT count(*) FROM `table_name`
Run Code Online (Sandbox Code Playgroud)

这将返回为602030

在此输入图像描述

Ari*_*ris 9

当您使用 phpmyadmin 或 heidiSQL 等工具浏览时,会执行如下查询:

SHOW TABLE STATUS LIKE 'table';
Run Code Online (Sandbox Code Playgroud)

该值不准确,如果运行多次,总会给出不同的结果。

相反,查询:

select count(*) from table
Run Code Online (Sandbox Code Playgroud)

实际上是对记录进行计数,并给出正确的结果。

正如 mysql 文档https://dev.mysql.com/doc/refman/8.0/en/show-table-status.html中提到的:

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