PostgreSQL:删除“孤立”记录的正确方法

伊戈尔·波马兰斯基

在我当前的项目中,有一些情况,在数据泵操作中,我必须执行这样的查询(这不是一个真实的例子,但它应该给你一些想法):

DELETE FROM notification
WHERE user_id NOT IN (SELECT id FROM user)

在大表上,这样的构造表现不佳,我认为是因为NOT IN构造导致无法使用索引。

这种方法应该表现更好:

DELETE FROM notification
USING (
    SELECT n.user_id, u.id FROM notification
    LEFT OUTER JOIN user u ON n.user_id = u.id
) i
WHERE 
        notification.user_id = i.user_id 
    AND i.id IS NULL

......但它看起来有点过于复杂。

对于此类操作,是否有更好的方法/最佳实践?

尼尔阿尔法西

我们可以使用EXISTS

DELETE FROM notification
WHERE NOT EXISTS
      (SELECT id FROM user WHERE id = notification.user_id)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章