【问题标题】:JPA 2.0: Batching queries with IN clauseJPA 2.0:使用 IN 子句批量查询
【发布时间】:2018-11-11 21:44:16
【问题描述】:

我正在寻找一种策略来批处理我的所有查询(使用 IN 子句),以克服数据库对 IN 子句 (See here) 的限制。

我通常会得到大小为 100000 到 305000 的列表。因此,解决这个问题变得非常重要。

到目前为止,我已经尝试了两种策略。

策略 1:

  • 创建一个实体,因此创建一个包含一列的表来保存这些值(我们可以使用 JPA 2.0 独立于供应商的方式动态创建临时表吗?)并将临时表中的数据用作子查询最终清理临时表之前的原始查询。

  • 优势:非常高效的查询。真的很快,我必须承认我提到的数字,大部分时间不到一分钟。

  • 可能的缺点:到目前为止,在我的情况下,使用临时表实际上是永久性的。

策略 2:

  • 计算给定输入列表的批处理大小,并为每个批处理执行查询并累积结果。

  • 优点:没有临时表。易于同一事务中的任何线程。

  • 缺点:一个很大的缺点是执行所有批次所需的时间。对于上述数字,目前处于不可接受的水平。需要 5 到 15 分钟!

感谢所有 JPA 专家的任何反馈、建议或改进。

谢谢。

【问题讨论】:

    标签: jpa-2.0


    【解决方案1】:

    我只测试了多达 50,000 个整数,但在使用各种方法拆分大型列表方面,我有一些相当不错的性能数据,其中 CLR 和数字表在高端方面处于领先地位:

    不确定您使用的是整数还是字符串,但结果应该大致相同。

    顺便说一句,我承认我不知道 JPA 2.0 是什么,但我假设您可以控制它发送到 SQL Server 的列表格式。

    【讨论】:

    • 非常感谢您张贴亚伦。您的解决方案看起来不错。我需要将纯 SQL 的东西翻译成它的 JPA 等价物:)
    猜你喜欢
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多