我的表中有 50 GB 的数据,如果备份后记录早于特定日期,则必须将其删除。
目前我按照以下步骤操作:
- 备份完整的表。
使用 where 子句运行删除查询以删除不需要的数据,如下所示:
DELETE FROM <some-table-name> WHERE `creation_time` <= '<some-valid-time>'
当前方法的问题是:
- 速度慢得令人痛苦。
- 当只需要增量数据时,数据的冗余存储;由于备份是对整个表进行的,但仅删除了选择性记录。
- 删除后,磁盘空间不会返回给操作系统(直到优化完成)。
我想过将该表分成更小的表以供每周/每月使用,这样可以轻松备份和删除,但一起查询它们将非常困难且缓慢。
请建议一些明智且有效的方法来做到这一点。
最佳答案
使用creation_time
作为partitioning key ,按周或按月进行分区。 Dropping old partitions is incredibly fast .
关于mysql - 如何从MySQL中删除大数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22267939/