我遇到了一些问题,一个表多年来一直在增长,现在正在消耗空闲磁盘空间。它只包含大约150万行,但它占用了几乎20 GB。我已经删除了几次不需要的行,但由于它是InnoDB,我无法回收任何空闲空间。
无论如何,我一直在尝试使用以下命令复制表:
'CREATE TABLE产品_新的LIKE产品;
INSERT INTO产品_新建SELECT * FROM产品;`
到目前为止一切顺利,在一个大约有200 k行的开发站点上执行该操作大约花了200秒。
但令人担心的是新表的大小。与原始表相比,它太小了!插入数据时是否遗漏了什么?当然,我希望重新获得一些数据,因为我一直在删除行,但没有这么多。
size of new table vs old table
我已经在几个表上尝试过这种方法,但只是在开发站点上,我担心我会错过什么,因为数据大小的差异是如此巨大。当用旧数据创建新的InnoDB表时,这种行为是正常的吗?
值得一提的是,innodb_file_per_table是ON。
1条答案
按热度按时间aiazj4mn1#
听起来好像表的统计信息在插入后没有更新过。
阅读更多关于here的信息
应回收可用空间。