gpt4 book ai didi

mysql - 从 MySQL 滚动删除旧行的最佳方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:57:35 29 4
gpt4 key购买 nike

我发现自己想在很多应用程序中滚动删除早于 (x) 天的行。在人流量大的 table 上最有效地执行此操作的最佳方法是什么?

例如,如果我有一个存储通知的表,并且我只想保留这些通知 7 天。或者我只想保留 31 天的高分。

现在我保留一行存储发布的纪元时间并运行一个每小时运行一次的 cron 作业并以如下增量删除它们:

DELETE FROM my_table WHERE time_stored < 1234567890 LIMIT 100

我这样做直到 mysql_affected_rows 返回 0。

我曾经一次完成所有操作,但这导致应用程序中的所有内容在 INSERTS 堆积时挂起 30 秒左右。添加 LIMIT 可以缓解这种情况,但我想知道是否有更好的方法来做到这一点。

最佳答案

尝试创建将在您想要的时间间隔后自动在数据库上运行的事件。

这是一个例子:如果要从某个表“tableName”中删除超过 30 天的条目,则具有列条目“datetime”。然后每天运行以下查询,这将执行所需的清理操作。

CREATE EVENT AutoDeleteOldNotifications
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
ON COMPLETION PRESERVE
DO
DELETE LOW_PRIORITY FROM databaseName.tableName WHERE datetime < DATE_SUB(NOW(), INTERVAL 30 DAY)

我们需要添加 ON COMPLETION PRESERVE 以在每次运行后保留该事件。您可以在这里找到更多信息:http://www.mysqltutorial.org/mysql-triggers/working-mysql-scheduled-event/

关于mysql - 从 MySQL 滚动删除旧行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472167/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com