目前在Oracle中,我每月运行一个程序来删除一些数据。出于Oracle中的性能原因,我使用BULK COLLECT
和FORALL .. DELETE
来执行删除。
任何人都知道Postgres
中是否有类似内容?如果我使用以下内容删除大量数据,是否需要关注性能?
DELETE FROM sample WHERE id IN (SELECT id FROM test);
答案 0 :(得分:1)
使用WHERE EXISTS
而非WHERE IN
。
否则,只要样本不是任何外键引用的目标,就应该没问题。如果是,您将需要索引的索引。
对于使用ON DELETE CASCADE
的FK上的真正大删除,最好是在批处理中删除引用方进行连接,然后删除引用方。这有助于防止数百万个DELETE
语句必须运行级联删除。