MySQL tableName.Ibd 文件大小巨大

标签 mysql

最近我将 MySQL 数据库从一台服务器复制到另一台服务器。与此同时,我已经从主数据库中清除了许多行。所以一段时间后复制就可以正确完成。我验证了两个数据库中的数据计数,它是相同的。

之后,我只是使用以下查询验证了从站中的数据库大小。

SELECT table_schema "Schema_Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM   information_schema.tables GROUP  BY table_schema;

通过这个查询我得到了数据库的大小。是 60 GB。


我的问题

我在“ProgramData->Data->DBName”文件夹中有一个名为tableName.ibd的文件。该文件占用500GB内存。

所以我的问题是,为什么这个文件占用这么大的大小,尽管我的数据库大小本身只有 60GB。

我还验证了程序数据内的 Ibdata 文件大小。它只有1GB。

请帮我解决这个问题。如何清除该文件。清除这个会有什么影响。

最佳答案

当数据被删除时,文件会变得碎片化。如果您删除了表中的大部分记录,那么大部分记录都会为空,这是正常的。

对其进行“碎片整理”的最简单方法是运行ALTER TABLE tablename FORCE。这会执行无操作更改并重建表。

60GB 的表需要一段时间才能重建,因此运行时要小心。

关于MySQL tableName.Ibd 文件大小巨大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45839537/

相关文章:

java - 从 Microsoft SQL 获取的阿拉伯语数据未正确显示

php - MySQLi 准备好的语句在相同的常规查询成功的情况下失败

php - 无法在 Windows 上本地使用 phpMyAdmin 配置 MySQL

php json_encode mysql 结果

mysql - 在 MySql 中执行查询时与 only_full_group_by 相关的错误

mysql - 有没有其他方法可以写这个查询

php - 使用 PHP 将图像插入 MySQL 数据库

php - 在 Yii2 中以模型而不是关联数组的形式获取命令查询结果,或将其转换为模型

mysql - 关联表Sequelize js中获取自定义字段的方法

java - 未收到来自服务器 : Java.net.SocketException 的响应:recvfrom 失败:ECONNRESET