【问题标题】:How do I clear old entries from a MySQL database table?如何从 MySQL 数据库表中清除旧条目?
【发布时间】:2017-01-10 21:43:20
【问题描述】:

我有一个 MySQL 数据库,里面有一张大表。一段时间后,它变得太满并且性能下降。每个星期天,我都想删除最后一次更新早于特定天数的行。

我该怎么做?

【问题讨论】:

标签: mysql sql database triggers


【解决方案1】:

制作一个预定事件以每晚运行您的查询。也请查看Event Scheduler

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

【讨论】:

    【解决方案2】:

    什么是餐桌设计?你有一个带有时间戳的列吗?

    假设你这样做了,你可以在删除命令中使用带有 datediff(your_date,CURDATE()) 的时间戳值。

    从 datediff(date_col, CURDATE ()) > your_num_days 的表中删除。

    【讨论】:

      【解决方案3】:

      自我回答

      制作一个每周末向数据库发送以下 SQL 的 Web 服务器:

      DELETE FROM table WHERE timestamp

      从表中删除

      WHERE 时间戳


      我可能需要锁定以防止工作堆积,如下所示:

      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;
      

      【讨论】:

        【解决方案4】:

        也许您可以提供更多信息,说明您如何将数据推送到数据库以及您如何在数据库上工作?因此,我们可以帮助您,而不必与黑暗作斗争......

        我将提供一个简单的解决方案:这是一种解决方法,但有效:

        每次触摸数据时,都会更新更新行中的时间戳。

        因此,您可以在每个星期日轻松过滤掉它们。


        更新

        作者自己提供的答案,在 Stackoverflow 上讨论过,似乎不是完全那样工作,比较the discussion

        【讨论】:

          猜你喜欢
          • 2020-05-31
          • 2011-02-21
          • 2015-06-24
          • 1970-01-01
          • 1970-01-01
          • 2019-08-12
          • 2017-01-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多