【发布时间】:2019-04-11 04:01:42
【问题描述】:
我在 postgres 数据库中有两个表,posts 和 users。 posts 有一个引用 users.id 主键列的 user_id 外键。两张表都很大。
我刚刚删除了一组随机用户(约占总用户的 80%),我想删除所有引用已删除用户的帖子,实际上是反加入和删除。最有效的方法是什么?
目前我有这个:
DELETE FROM posts l
WHERE NOT EXISTS
(
SELECT NULL
FROM users r
WHERE r.id = l.user_id
)
有没有更有效的方法?
【问题讨论】:
-
如果您要删除大量用户,那么您可能需要创建一个新表,其中包含仍处于活动状态的帖子。
-
当然最好的选择是在删除用户的同时删除帖子。您的 DBMS 甚至可以使用某种参照完整性系统自动执行此操作...
-
@GordonLinoff 是的,这很好。说为了争论,我删除了 80% 的用户(我已经更新了问题以反映这个前提)。
-
@JeffUK 级联删除不是一个选项。
标签: sql postgresql anti-join