举个例子,假设我有一个网站,用户可以添加无限的cron作业(频率为1s),并在Mysql表中记录每个作业的结果。
既然我没有无限制的存储空间(也因为我不希望我的桌子变大)我想将日志历史记录限制为仅限30天。
以前在旧版本的Mysql上运行DELETE FROM logs where created_at < DATE_SUB(NOW(), INTERVAL 30 DAY)
来清理我的表,但这会导致我的表经常崩溃并被破坏。它还会在DELETE
期间锁定我的桌面,这会使网站变得非常慢。
无论如何,那么如何为我的Mysql表或行实现行旋转(如日志旋转)?删除行是我唯一的选择还是有其他选择?
答案 0 :(得分:3)
您可以使用数据库分区
https://dev.mysql.com/doc/refman/5.7/en/partitioning-types.html
实施例
set
这给出了7个分区。那么你可以简单地
PARTITION BY HASH( MONTH(column) )
删除单个分区。
答案 1 :(得分:1)
This讨论了使用PARTITION BY RANGE
作为一种非常有效的方式来删除&#34;旧数据。它解释了如何执行DROP PARTITION
(效率高于TRUNCATE
)并每天或每周创建一个新分区。