我需要在生产数据库中删除大量数据,该数据库的大小约为100GB.如果可能的话,我想尽量减少停机时间.
我的删除选择标准很可能是
DELETE*FROM POSTING WHERE USER.ID = 5 AND UPDATED_AT <100
删除它的最佳方法是什么?
您可以尝试使用mysql doc中提到的方法:
选择不要删除的行到与原始表具有相同结构的空表中:
INSERT INTO t_copy SELECT*FROM t WHERE ...;
使用RENAME TABLE以原子方式移动原始表并将副本重命名为原始名称:
RENAME TABLE t TO t_old,t_copy TO t;
删除原始表:
DROP TABLE t_old;
最好的方法是使用 LIMIT 子句增量删除(按 10000 项),但不应用排序。这将允许 MySQL 更频繁地刷新结果,并且事务不会很大。您可以使用已安装的任何具有 mysql 连接器的编程语言轻松完成此操作。请务必在每个语句后提交。
索引肯定会有所帮助,但在 100 GB 表上构建索引也需要一段时间(无论如何,当您将来要重用索引时,它是值得创建的)。顺便说一句,您当前的查询不正确,因为引用了此处未列出的表 USER。您应该小心使用索引,以便优化器可以从使用它中受益。
| 归档时间: |
|
| 查看次数: |
4042 次 |
| 最近记录: |