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. 从临时表中复制它们