微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql大表删除

如何解决mysql大表删除

我正在使用版本5的MysqL数据库我有一个表,该表具有约500.000.000行。如果我信任PHPmyadmin,该表将回收50GB的磁盘空间。我想删除90%的行以回收磁盘空间。

什么是最佳选择?

  • 我可以使用脚本删除行并运行“ OPTIMIZE TABLE”。桌子将被锁住,但我不知道需要多长时间?有人有经验吗?

  • 我可以删除表格,创建一个新表格并手动导入10%。在这种大小的情况下,放下桌子需要多长时间?

谢谢!

解决方法

由于您要删除表中的大多数行,因此建议将要保留的行移到临时表中,将其截断,然后重新导入。这仍然需要在表上停机(也就是说,在进行操作时不应对表进行读取或写入操作),但比逐行删除要快一个数量级。

create table tmptable as select * from mytable where ...;
truncate table mytable;
insert into mytable select * from tmptable;
drop table tmptable;

truncate table会删除并重新创建表,该表将回收空间。 documentation关于您的问题有一些有趣的要点,例如:

截断操作可删除并重新创建表,这比逐行删除行要快得多,特别是对于大型表。

,

最快的方法是

  1. 将所需文件复制到临时表中。
  2. 截断表格
  3. 从临时表中复制它们

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。