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