您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

@BatchSize是聪明还是愚蠢的使用?

@BatchSize是聪明还是愚蠢的使用?

您提供的链接问题/答案通常更关心优化和延迟加载的需求。它们当然也适用于此,但是它们不仅与批量加载有关,这只是可能的方法之一。

一个重要的问题与链接加载中提到的预加载有关,这表明如果始终使用属性,则通过使用预加载可能会获得更好的性能。通常对于收藏夹而言 ,在许多情况下对于一对一关联也是如此。

例如,假设您具有以下实体,bs并且cs在使用时 使用该实体A

public class A {
  @OneToMany
  private Collection<B> bs;

  @OneToMany
  private Collection<C> cs;
}

如果您不将它们加入单个查询中,那么渴望加载bs并且cs显然会遭受N + 1选择问题。但是,如果您将它们加入单个查询中,例如:

select a from A
  left join fetch a.bs
  left join fetch a.cs

然后创建 之间bs以及cs和返回count(a.bs) x count(a.cs)结果集行被逐个读取并组装成的实体A和他们的收藏bscs

批量抓取是非常优化在这种情况下,因为你会先看AS,然后bs,然后cs,导致更多的查询,但与从数据库转移总量少得多的数据量。而且,单独的查询比带有连接的大型查询要简单得多,并且数据库更易于执行和优化。

其他 2022/1/1 18:14:32 有537人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶