如何从MySQL数据库表中清除旧条目?
我有一个MySQL数据库,其中有一个大表。一段时间后,它会变得太满,性能会下降。每个星期天,我都要删除上次更新时间早于一定天数的行如何从MySQL数据库表中清除旧条目?,mysql,sql,database,triggers,Mysql,Sql,Database,Triggers,我有一个MySQL数据库,其中有一个大表。一段时间后,它会变得太满,性能会下降。每个星期天,我都要删除上次更新时间早于一定天数的行 我该怎么做?也许您可以提供更多信息,说明如何将数据推送到数据库,以及如何处理数据库?因此,我们可以帮助你,而不必与黑暗斗争 我将提供一个简单的解决方案:这是一种变通方法,但可以: 每次触摸数据时,都会更新更新行中的时间戳 因此,你可以很容易地在每个星期天过滤掉它们 使现代化 作者自己提供的答案已经在Stackoverflow上讨论过了,相比之下,似乎并不是这样的 制
我该怎么做?也许您可以提供更多信息,说明如何将数据推送到数据库,以及如何处理数据库?因此,我们可以帮助你,而不必与黑暗斗争 我将提供一个简单的解决方案:这是一种变通方法,但可以: 每次触摸数据时,都会更新更新行中的时间戳 因此,你可以很容易地在每个星期天过滤掉它们 使现代化 作者自己提供的答案已经在Stackoverflow上讨论过了,相比之下,似乎并不是这样的 制作一个web服务器,每个周末向数据库发送以下SQL: 从表中删除时间戳
DELIMITER //
CREATE EVENT testlock_event ON SCHEDULE EVERY 2 SECOND DO
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
DO RELEASE_LOCK('testlock_event');
END;
IF GET_LOCK('testlock_event', 0) THEN
-- add some business logic here, for example:
-- insert into test.testlock_event values(NULL, NOW());
END IF;
DO RELEASE_LOCK('testlock_event');
END;
//
DELIMITER ;
最后答覆:
CREATE EVENT `purge_table` ON SCHEDULE
EVERY 1 DAY
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO BEGIN
IF GET_LOCK('purge_table', 0) THEN
DELETE FROM table WHERE timestamp < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));
END;
桌子的设计是什么?有带时间戳的列吗 假设您这样做,您可以在delete命令中使用该时间戳值和datediffyour_date CURDATE
从datediffdate\u col,CURDATE>您的天数的表中删除。制作一个计划事件以每晚运行查询。也请退房
为了把它安排在每个星期天运行,看看这篇文章,看看rkosegi的答案,我倾向于保留所有的行。您可能需要考虑分区方案。
CREATE EVENT `purge_table` ON SCHEDULE
EVERY 1 DAY
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO BEGIN
DELETE FROM my_table WHERE my_timestamp_field <= now() - INTERVAL 5 DAY
END