【发布时间】:2018-11-11 21:44:16
【问题描述】:
我正在寻找一种策略来批处理我的所有查询(使用 IN 子句),以克服数据库对 IN 子句 (See here) 的限制。
我通常会得到大小为 100000 到 305000 的列表。因此,解决这个问题变得非常重要。
到目前为止,我已经尝试了两种策略。
策略 1:
创建一个实体,因此创建一个包含一列的表来保存这些值(我们可以使用 JPA 2.0 独立于供应商的方式动态创建临时表吗?)并将临时表中的数据用作子查询最终清理临时表之前的原始查询。
优势:非常高效的查询。真的很快,我必须承认我提到的数字,大部分时间不到一分钟。
可能的缺点:到目前为止,在我的情况下,使用临时表实际上是永久性的。
策略 2:
计算给定输入列表的批处理大小,并为每个批处理执行查询并累积结果。
优点:没有临时表。易于同一事务中的任何线程。
缺点:一个很大的缺点是执行所有批次所需的时间。对于上述数字,目前处于不可接受的水平。需要 5 到 15 分钟!
感谢所有 JPA 专家的任何反馈、建议或改进。
谢谢。
【问题讨论】:
标签: jpa-2.0