我正在尝试从数据库表Student
中批量删除记录。
一切运行正常,但我的问题是:
在给定的代码段中,当我的列表(引用查询:studentIdList)大小大于 1000000 时,是否有任何限制?在这种情况下我需要做任何额外的事情吗?
String hql = "delete from Student where id in (:studentIdList)";
session.createQuery(hql).setParameterList("studentIdList",studentIdList).executeUpdate();
session.flush();
最佳答案
需要考虑的事情很少。
1.) 如果配置,缓存
将如何表现。
2.) 对于1000000条记录
,肯定需要进行负载测试。 OOM错误是否有变化。
您可以尝试使用上述HQL
和Hibernate Batch
,然后测量并得出统计数据。盲目地告诉统计数据是不可能的。
另外,不使用IN运算符
,在循环中使用==
的性能如何。
WHERE id = 1;
Is transformed to a simple equality filter.
WHERE id IN (1);
Is transformed into an array match of:
WHERE id = ANY(ARRAY[1]);
我建议您尝试一下,这对您来说将是一个有趣的练习。
阅读更多内容并进行实验后,Batch 将在内部仅使用 IN
运算符进行最终查询。因此,使用批处理将在其间添加额外的过程,我的想法是使用 HQL 和 IN
> 删除操作就可以了。
关于java - 如何使用hibernate hql从表中批量删除记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503963/