OpenJPA在FetchPlan中提供了一些参数。
(http://openjpa.apache.org/builds/1.2.0/apidocs/org/apache/openjpa/persistence/FetchPlan.html)
我被困在其中之一FetchBatchSize中。
希望有人可以分享他们的经验。

这是方案,假设我要从数据库中选择最多1000条记录(MS-SQL)
1.如果我将FetchBatchSize保留为默认值-1,将需要20秒才能返回1000条记录;

  • 如果我将FetchBatchSize设置为100,则时间成本显着降低到不到2秒,这很好,但是如果我尝试仅获取50条记录(小于FetchBatchSize 100),则将花费更长的时间时间(在我的测试中为50秒)是不可接受的。
  • 好的,所以,我想如果FetchBatchSize超出用户想要的数量,则将花费更多时间。我可以根据用户设置的计数在运行时更改FetchBatchSize。您想要1000,我将FetchBatchSize设置为1000,想要100,将其设置为50,但是如果用户只需要几条记录呢?我也将FetchBatchSize设置为2吗?

  • 所以我的问题是,当maxResultCount为变量时,如何选择合适的FetchBatchSize? openJPA文档中是否有适合大多数情况的DEFAULT值(例如20)?或者建议在运行时进行更改。

    任何评论表示赞赏。谢谢!

    最佳答案

    实际上,这比OpenJPA问题更像是MS-SQL调优问题-FetchBatchSize值被传递给驱动程序。

    根据最大结果计数参数在运行时动态设置值当然没有错。另外,假设您在指定大于limit子句的数字时遇到的延迟不是由于配置不明确而引起的,将有趣的事情添加到OpenJPA SQLServerDictionary中以在最大结果值达到上限时限制批处理大小存在。出现在OpenJPA邮件列表中可能是一件好事。

    10-06 12:52