为什么数据库表 TABLES.table_rows 列与 MySQL 中物理表中的 select count(*) 不匹配

sur*_*r80 5 mysql database count information-schema

将 information_schema.TABLES.table_rows 列与从“SELECT count(*) from”检索到的物理行计数进行比较时,数字不匹配。为什么行数不同?

mysql> select TABLE_ROWS from TABLES where TABLE_NAME = 'gbl_session' and TABLE_SCHEMA = 'mydb';
+------------+
| TABLE_ROWS |
+------------+
|       7306 |
+------------+
1 row in set (0.01 sec)

mysql> select count(*) from mydb.gbl_session;
+----------+
| count(*) |
+----------+
|     7800 |
+----------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

Ale*_*tan 1

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

阅读此内容以获取更多信息:https ://dev.mysql.com/doc/refman/5.1/en/tables-table.html

正如那里的评论所建议的,您可以尝试:

TABLE_ROWS(也许还有 INFORMATION_SCHEMA.TABLES 中的其他一些列)可能与当前表内容不同步,但您可以通过运行 ANALYZE 来更新它。