【问题标题】:Same MySQL database import showing different numbers of records相同的 MySQL 数据库导入显示不同数量的记录
【发布时间】:2016-08-19 17:33:18
【问题描述】:

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

第一次导入:

第二次导入:

第三次导入:

信任行数是不对的,如图所示,它显示了错误提示的近似值。那么问题来了,我们如何才能确保数据库是正确的并且没有记录丢失呢?注意:快捷方式要求不能对每个表使用计数,这将花费大量时间。

【问题讨论】:

    标签: mysql database import backup


    【解决方案1】:

    像 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

    【讨论】:

    • 谢谢,我可以通过执行这个查询来确保每个表都有什么捷径?
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,我可以通过执行这个查询来确保每张表有什么捷径吗?
    • Nathan 就这个问题stackoverflow.com/questions/286039/… 报告了一个很好的解决方案。 (对不起,我无法在此处粘贴代码,因为未正确解析)
    【解决方案3】:

    你会注意到所有的“负 mysql 记录”这不是它的负号 ~,它的意思是大约。 如果你想要实际计数使用

    SELECT count(*) FROM 'table_name';
    

    【讨论】:

    • 谢谢,我可以通过执行这个查询来确保每张表有什么捷径吗?
    【解决方案4】:

    令人惊讶的是,MySQL 在数字方面真的很糟糕。对于 InnoDB 表,这些通常是对它包含多少行的估计,并且它们可能非常错误。

    它计算您看到的数字的方法是取表数据的总大小并除以平均行大小(以字节为单位)。这通常是对您的数据足够好的近似值,但它可能非常具有误导性,最多相差 100 倍。

    确定的唯一方法是执行COUNT(*),在非常活跃的表上计算可能需要一些时间。

    【讨论】:

    • 谢谢,我可以通过执行这个查询来确保每张表有什么捷径吗?
    • 没有捷径可走。在空闲的服务器上,每个表通常需要几毫秒。在一个写活动非常繁重的情况下,它可能需要几分钟,这真的取决于。试一试,看看它对您的表现如何。您在那里看到的数字既快又脏,它们很少需要很长时间才能产生。
    • 我在everytable 上试了一下,很费时间
    • 这取决于您的计算机硬件和您的 InnoDB 调优参数。如果 InnoDB 引擎缺乏内存性能可能不会那么好。一般来说,互联网上有large section in the manual devoted to InnoDB parameters 以及许多指南。这些表都有PRIMARY KEY?
    • 最后我必须对每个表执行查询以确保它。谢谢
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多