gpt4 book ai didi

hibernate - 努力优化Hibernate中的N+1查询

转载 作者:行者123 更新时间:2023-12-03 15:54:58 26 4
gpt4 key购买 nike

我正在努力改进我正在从事的项目的 n+1 查询。我将 Hibernate 与下面显示的模型一起使用,我想表达一个查询来检索与投资组合相关的所有项目,包括每个项目的最后两个价格(给定日期的价格和以前的价格)。

enter image description here

示例 API:

List<Items> items = findItemsWithLatestTwoPrices(portfolio, latestPriceDate);

目前我使用一个查询来提取与投资组合相关的所有项目,然后我遍历这些项目以查询给定项目的两个最新价格(所以 n+1)。

我尝试使用相关子查询在 native sql 中表达这一点,但性能很糟糕。这一点以及每天都有新价格(因此查询变慢)的事实使我认为我需要一个不同的模型,但我正在努力想出一个合理有效且随着时间推移保持不变的模型价格上涨的数量。

我一直在考虑不同的解决方案,包括将价格表示为链表,或使用某种树,但我相信有更好的选择。我错过了一些明显的东西吗?有没有人在处理类似问题时提出了很好的解决方案?

只要性能不错,我真的不在乎我是使用 HQL 还是 native SQL。我也愿意对模型进行更改。

谢谢!

[编辑]

因为我有两年多的价格数据,而且可以有 1000 多个项目公关。投资组合,检索整个图表可能不是一个好主意。此外,我需要按日期随机访问,因此不幸的是,不能将两个价格存储为项目的字段。

最佳答案

您应该尝试在一个查询中检索项目和价格。如果这样做,您可以迭代您的商品及其价格,而无需为每个商品进行选择。您的 n+1 问题应该消失了。

例如,您可以在查询中或在关联定义中使用预先获取。

关于您对提高价格对象的性能关注。也许您可以将两个延迟价格存储在您的项目类的一两个额外字段中。然后,您可以随时急切地获取那些额外的字段,并在需要时懒惰地获取集合中的旧价格。

关于hibernate - 努力优化Hibernate中的N+1查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com