栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我该如何解决N + 1选择问题?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我该如何解决N + 1选择问题?

除了联接之外,您还可以使用子选择。这将导致执行2个查询(或者,如果您有 m个 列表,则通常为 m + 1
),但它也可以很好地扩展大量列表,这与联接获取不同。 __

使用join fetching,如果您使用实体获取2个表(或列表),则会得到 笛卡尔乘积 ,即两个表中的行对的所有组合。如果表很大,结果可能会 很大
,例如,如果两个表都有1000行,则笛卡尔乘积将包含100万行!

对于这种情况,更好的选择是使用子选择。在这种情况下,您将在主选择(将加载父实体)的顶部发出2个选择(每个表一个),因此,总共要加载3行查询的1 + 100
+ 100行。

对于记录,与延迟加载相同将导致201个单独的选择,每个选择都加载一行。

更新: 这是一些示例:

  • 一个教程:Tuning Lazy Fetching,最后有一个关于subselect的部分(顺便说一句,它也解释了n + 1 selects问题以及所有解决该问题的策略),
  • Hibernate参考中的HQL子查询示例,
  • 以防万一,从Hibernate参考中获取策略的章节 -与第一个内容相似,但更加详尽


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号