提问者:小点点

优化SQL查询-清理数据库中的旧日志


好的,我们在Wordpress网站上有一个相当大的数据库,我们每个月运行一个查询,从数据库中删除旧的日志,我一直在使用下面的查询来完成它。

我主要查看需要删除的行总数,并继续运行此查询,直到日志全部删除。

但是,由于限制为1000,查询大约需要30秒才能完成。 posts表包含大约400,000个条目,在这种情况下,其中大约60,000个条目需要删除。

任何帮助都非常感激! 当涉及到SQL时,我是一个新手,所以这个查询可能会伤害一些人的眼睛,但是请温柔点,我正在学习! :)

CREATE TEMPORARY TABLE LOGSTOCLEAN
SELECT
  ID
FROM
  wp_posts WTCUP
  LEFT JOIN wp_term_relationships WTCUTR ON WTCUP.ID = WTCUTR.object_id
  LEFT JOIN wp_term_taxonomy WTCUTT ON WTCUTR.term_taxonomy_id = WTCUTT.term_taxonomy_id
WHERE
  WTCUTT.term_id IN (10)
  AND WTCUP.post_date < DATE_SUB(NOW(), INTERVAL 45 DAY)
GROUP BY
  WTCUP.ID
  LIMIT 1000;

    DELETE FROM wp_posts
    WHERE wp_posts.ID IN(SELECT ID FROM LOGSTOCLEAN)
    LIMIT 1000;

共1个答案

匿名用户

时间不是行限制,而是允许删除最老的行,我们可能希望这些行通过集群或分区来共同定位,或者至少可以通过索引快速定位。 选择最小日期-时间+一些间隔,然后删除所有<; 那个。 按天分区意味着您可以一次清理/删除一个分区。 您的RDBMS可能会有所不同! 正在删除一天(分区?) 每一天的午夜似乎都是明智之举!