循环遍历集合时执行sql删除数据的最佳方法

时间:2014-02-03 04:26:11

标签: sql

我有一组约200 000个id存储在一个集合中,我想循环遍历该集合并从表格中执行DELETE,其中表格中的id与集合中的id匹配。

目前我正在这样做,因为我循环:

for(Integer i : idList) {
    sql = "delete from sdata where id = " + i
    stmtDelete.executeUpdate(sqlDelete);
}

我的问题是,在这种情况下使用准备好的陈述并做一个

是值得的
preparedStatement.executeUpdate();

当我循环通过集合? 或者有更好/更有效的方式吗?

感谢。

1 个答案:

答案 0 :(得分:0)

200,000 ids是大量的ID。我会将它们插入表中并执行以下操作:

delete from sdata
    where id in (select id from TempList)

注意:在某些SQL引擎中,具有相关子查询的exists的效果优于in

这是大量删除,这将填充大量日志空间并锁定表一段时间。您可能希望以较小的增量执行它们,例如一次10,000个。