mysql 大 table 删除
mysql large table delete
我正在使用 mysql 数据库版本 5。我有一个 table,它有大约 500.000.000 rows.The table 回收 50GB 磁盘space 如果我信任 phpmyadmin。我喜欢删除 90% 的行以回收磁盘 space.
最好的选择是什么?
我可以使用脚本和运行“优化TABLE”删除行。 table 将被锁定,但我不知道需要多长时间?有人有经验吗?
我可以删除 table,创建一个新的并手动导入 10%。下降 table 需要多长时间?
谢谢!
由于您想删除 table 中的大部分行,我建议您将要保留的行移动到临时 table,截断 table,然后re-importing。这仍然需要在 table 上停机(也就是说,在操作进行时不应对 table 进行读取或写入),但应该比逐行删除快一个数量级.
create table tmptable as select * from mytable where ...;
truncate table mytable;
insert into mytable select * from tmptable;
drop table tmptable;
隐含地,truncate table
删除并重新创建 table,这将回收 space。 documentation 关于您的问题有一些有趣的要点,例如:
Truncate operations drop and re-create the table, which is much faster than deleting rows one by one, particularly for large tables.
最快的方法是
- 将需要的文件复制到临时文件中 table。
- 截断 TABLE
- 从临时文件中复制回来table
我正在使用 mysql 数据库版本 5。我有一个 table,它有大约 500.000.000 rows.The table 回收 50GB 磁盘space 如果我信任 phpmyadmin。我喜欢删除 90% 的行以回收磁盘 space.
最好的选择是什么?
我可以使用脚本和运行“优化TABLE”删除行。 table 将被锁定,但我不知道需要多长时间?有人有经验吗?
我可以删除 table,创建一个新的并手动导入 10%。下降 table 需要多长时间?
谢谢!
由于您想删除 table 中的大部分行,我建议您将要保留的行移动到临时 table,截断 table,然后re-importing。这仍然需要在 table 上停机(也就是说,在操作进行时不应对 table 进行读取或写入),但应该比逐行删除快一个数量级.
create table tmptable as select * from mytable where ...;
truncate table mytable;
insert into mytable select * from tmptable;
drop table tmptable;
隐含地,truncate table
删除并重新创建 table,这将回收 space。 documentation 关于您的问题有一些有趣的要点,例如:
Truncate operations drop and re-create the table, which is much faster than deleting rows one by one, particularly for large tables.
最快的方法是
- 将需要的文件复制到临时文件中 table。
- 截断 TABLE
- 从临时文件中复制回来table