mysqldump创建的行数多于实际的主键范围

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (85)

我的表大约有290,000行。在备份之前,它可能需要<200 MB。当我使用创建此表mysqldump的备份时,备份文件需要大约800 MB,当我从备份文件中重新加载时mysql,我现在看到它有~430,000行,比原始表更多(我通过HeidiSQL检查) UI)。但是,如果我对主键的总范围进行查询,则它与旧表(~290,000)相同。什么可能出错?

以下是所关注的特定表的CREATE代码。它只是一个变量列表(DECIMAL类型)

    CREATE TABLE `ciceroout` (
    `runID` INT(11) NOT NULL AUTO_INCREMENT,
    `IterationNum` DECIMAL(20,10) NULL DEFAULT NULL,
    `IterationCount` DECIMAL(20,10) NULL DEFAULT NULL,
    `RunningCounter` DECIMAL(20,10) NULL DEFAULT NULL,
    \* more 100 variables like this *\
    PRIMARY KEY (`runID`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=287705
;

编辑:这是我使用的实际转储和恢复命令。我们的数据库有六个表,我已经转储了一个表,所以在这里我倾倒剩下的五个表。

转储表:

 mysqldump -u root --single-transaction=true --verbose -p [dbname] --ignore-table=[dbname].images > \path\[backupname].sql

恢复表(删除原始数据库,并启动一个空数据库):

mysql -u root -p [db name] < \path\[backupname].sql

这是我在HeidiSQL UI上看到的内容

提问于
用户回答回答于

如果你想知道大的导出文件:这是正常的。 数据以人类可读格式(SQL)存储,而表空间上的实际数据存储在更有效的数据结构中(B + Tree)

关于表统计,HeidiSQL向您展示: 对于InnoDB,“行数”统计只是一个近似值

结果COUNT(*)给出了真实的行数,与原始行匹配,对吗?

当您开始处理数据时,近似值会随着时间的推移而变化并变得更好。

SHOW TABLE STATUS的MySQL手册页指出:

行数。某些存储引擎(如MyISAM)会存储确切的计数。对于其他存储引擎,例如InnoDB,该值是近似值,并且可以与实际值相差多达40%至50%。在这种情况下,使用SELECT COUNT(*)来获得准确的计数。

扫码关注云+社区

领取腾讯云代金券