问题:
我有2个相当大的表:message
(+20万条记录~11GB)和message_subject
(1400万条记录~3GB)需要“清理”。
如果邮件有主题,我需要删除超过2周的所有邮件以及相应的message_subjects,但重要的是要注意并非所有邮件都有主题且邮件超过2周没有主题也需要删除。
这两个表没有通过InnoDB指定的关系,即使message_subject
具有字段message_id
。
如果在ON DELETE CASCADE
的2个表格之间指定了关系,我可以从message
中删除该记录,并自动删除相应的message_subject
,但这不是情况下。
我尝试过:
DELETE message, message_subject
FROM message
INNER JOIN faq
WHERE message.id = message_subject.message_id
AND message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)
删除包含主题的邮件;没有主题的超过2周的邮件不会被删除。
DELETE message, message_subject
FROM message
INNER JOIN message_subject
ON message.id = message_subject.message_id
WHERE message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)
与第一个查询完全相同;没有主题,它不会删除旧邮件。
有人可以帮我吗?
答案 0 :(得分:1)
感谢sgeddes&#39;评论,我能够使用以下查询解决问题:
DELETE message, message_subject
FROM message
LEFT OUTER JOIN message_subject
ON message.id = message_subject.message_id
WHERE message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)
显然与
相同DELETE message, message_subject
FROM message
LEFT JOIN message_subject
ON message.id = message_subject.message_id
WHERE message.add_date < DATE_SUB(CURDATE(),INTERVAL 2 WEEK)