【发布时间】:2016-08-19 17:33:18
【问题描述】:
清空整个数据库后,同一数据库导入了 3 次,每次都显示不同数量的记录。为什么?
信任行数是不对的,如图所示,它显示了错误提示的近似值。那么问题来了,我们如何才能确保数据库是正确的并且没有记录丢失呢?注意:快捷方式要求不能对每个表使用计数,这将花费大量时间。
【问题讨论】:
标签: mysql database import backup
清空整个数据库后,同一数据库导入了 3 次,每次都显示不同数量的记录。为什么?
信任行数是不对的,如图所示,它显示了错误提示的近似值。那么问题来了,我们如何才能确保数据库是正确的并且没有记录丢失呢?注意:快捷方式要求不能对每个表使用计数,这将花费大量时间。
【问题讨论】:
标签: mysql database import backup
像 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
【讨论】:
我不会依赖以波浪号 (~) 作为前缀的数字比较。~ 表示近似值。
基于本编码器对此的响应 phpMyAdmin - What a tilde (~) means in rows column? 近似值可能会有很大差异。
要检查导入的实际行数,请使用:
select count(*) from TABLE_NAME
【讨论】:
你会注意到所有的“负 mysql 记录”这不是它的负号 ~,它的意思是大约。 如果你想要实际计数使用
SELECT count(*) FROM 'table_name';
【讨论】:
令人惊讶的是,MySQL 在数字方面真的很糟糕。对于 InnoDB 表,这些通常是对它包含多少行的估计,并且它们可能非常错误。
它计算您看到的数字的方法是取表数据的总大小并除以平均行大小(以字节为单位)。这通常是对您的数据足够好的近似值,但它可能非常具有误导性,最多相差 100 倍。
确定的唯一方法是执行COUNT(*),在非常活跃的表上计算可能需要一些时间。
【讨论】:
PRIMARY KEY?
您看到的数字是近似值。要获得实际数字,只需单击数字。您将看到实际数字。您无需运行任何查询即可查看实际行号。
【讨论】: