我正在尝试从数据库表Student
批量删除记录。
一切正常但我的问题是:
在给定的代码段中,我的列表(请参阅query:studentIdList)大小是否大于1000000时是否有任何限制?在这种情况下,我是否需要做额外的事情?
String hql = "delete from Student where id in (:studentIdList)";
session.createQuery(hql).setParameterList("studentIdList",studentIdList).executeUpdate();
session.flush();
答案 0 :(得分:2)
有几件事需要考虑。
1。)如果配置cache
将如何表现。
2.。对于1000000 records
,肯定需要进行负载测试。是否有 OOM 错误的更改。
您可以尝试使用上面的HQL
和Hibernate Batch
,然后衡量并提出统计数据。盲目地告诉统计数据是不可能的。
另外,不是使用IN operator
,而是在循环中使用==
的效果如何。
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 with IN
进行删除操作的想法将很好去。