相同的 MySQL 数据库导入显示不同数量的记录

Same MySQL database import showing different numbers of records

同一个数据库在清空整个数据库后导入了 3 次 3 次,令人惊讶的是每次它都显示不同数量的记录。为什么?

第一次导入:

第二次导入:

第三次导入:

如图所示,相信行数是不正确的,它显示的是错误提示的近似值。那么问题来了,如何保证数据库是正确的,没有记录丢失呢?注意:short-cut require 不能对每个使用计数 table 它将花费很多时间。

像 phpmyadmin/adminer 这样的工具总是从 INFORMATION_SCHEMA 中选择行数。在 InnoDb 存储引擎的情况下,行数是一个粗略的估计,它永远不是准确的值。 phpmyadmin 选择的 table_rows 对于 Innodb

永远不准确
SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'table_name';

我们需要

的精确值
SELECT count(*) FROM 'table_name';

供参考:http://dev.mysql.com/doc/refman/5.7/en/tables-table.html

我不会依赖以波浪号 (~) 作为前缀的数字比较。~ 表示近似值。

基于 bencoder 对此的回应 phpMyAdmin - What a tilde (~) means in rows column? 近似值可能会有很大差异。

要检查导入的实际行数,请使用: select count(*) from TABLE_NAME

您会注意到所有 "negative mysql records" 这不是一个负号,它的 ~ 表示大约。 如果你想要实际计数使用

SELECT count(*) FROM 'table_name';
令人惊讶的是,

MySQL 的数字真的很差。对于 InnoDB tables,这些通常是对它包含多少行的估计,它们可能是非常错误的。

它计算您看到的数字的方法是计算 table 数据的总大小,然后除以以字节为单位的平均行大小。这通常是您数据的足够好的近似值,但它可能会产生很大的误导,最多相差 100 倍。

唯一确定的方法是 COUNT(*),在非常活跃的 table.

上可能需要一些时间来计算。

您看到的数字是近似值。要获得实际号码,只需点击号码。你会看到实际的数字。您无需 运行 任何查询即可查看实际行号。