我有一组约200 000个id存储在一个集合中,我想循环遍历该集合并从表格中执行DELETE,其中表格中的id与集合中的id匹配。
目前我正在这样做,因为我循环:
for(Integer i : idList) {
sql = "delete from sdata where id = " + i
stmtDelete.executeUpdate(sqlDelete);
}
我的问题是,在这种情况下使用准备好的陈述并做一个
是值得的preparedStatement.executeUpdate();
当我循环通过集合? 或者有更好/更有效的方式吗?
感谢。
答案 0 :(得分:0)
200,000 ids是大量的ID。我会将它们插入表中并执行以下操作:
delete from sdata
where id in (select id from TempList)
注意:在某些SQL引擎中,具有相关子查询的exists
的效果优于in
。
这是大量删除,这将填充大量日志空间并锁定表一段时间。您可能希望以较小的增量执行它们,例如一次10,000个。