MySQL修剪旧行每天一个

时间:2016-01-27 08:44:13

标签: mysql

我有一个巨大的MySQL表,它每秒增长大约90行,每4小时130万行被转储到那里,时间戳

user(varchar)   | created_at(timestamp)
----------------------------
user 1          | 2016-01-27 08:00:00
user 2          | 2016-01-27 08:00:00
user 3          | 2016-01-27 08:00:00
...
user 1          | 2016-01-27 12:00:00
user 2          | 2016-01-27 12:00:00

等...修剪超过一个月的数据到每天只有一行的最佳方法是什么?

在00:00总是有行,所以我在思考

的内容

created_at >= date + 00:00 and created_at < date + 19:59

select user, max(created_at) from table where created_at = date group by username

2 个答案:

答案 0 :(得分:0)

对于如此大量的数据,您可能希望使用分区来管理数据,因为在大型表上使用过滤器运行delete语句可能需要很长时间。按月创建分区时,删除分区的速度非常快。但这将删除该月的数据,因此您可能需要在删除分区之前将用户摘要存储在另一个表中。

答案 1 :(得分:0)

对,我有一点戏,所以我会发布这个给其他想要修剪数据的人。

created_at必须是TIMESTAMP

delete from `table` where `created_at` < DATE_SUB(NOW(), INTERVAL 30 DAY) and HOUR(created_at) = 00

这将删除时间设置为00的所有行,但如果您需要更多灵活性,则可以执行

delete from `table` where `created_at` < DATE_SUB(NOW(), INTERVAL 30 DAY) and HOUR(created_at) between 0 and 4