【发布时间】:2014-04-11 15:41:37
【问题描述】:
我的表中有 50 GB 的数据,如果记录早于特定日期,则必须在备份后将其删除。
目前我遵循以下步骤:
- 备份完整的表格。
-
使用 where 子句运行删除查询以删除不需要的数据:
DELETE FROM <some-table-name> WHERE `creation_time` <= '<some-valid-time>'
当前方法的问题是:
- 速度太慢了。
- 数据的冗余存储,当只需要增量数据时;由于备份了整个表,但只删除了选择性记录。
- 删除后磁盘空间不会返回给操作系统(直到优化完成)。
我曾考虑将该表分解为每周/每月的较小表,这样可以轻松备份和删除,但将它们一起查询将非常困难且速度慢。
请建议一些聪明有效的方法来做到这一点。
【问题讨论】:
-
一个标准的方法是删除索引和约束,删除你需要的,然后重新创建它们。
标签: mysql sql large-data